import sys input = sys.stdin.readline class tmp: def __init__(self, n_max:int=10**6): self.sieve = self.pre_factorization(n_max) def pre_factorization(self, n_max:int): sieve = [i for i in range(n_max+1)] p = 2 while p*p <= n_max: if sieve[p] == p: for q in range(2*p,n_max+1,p): if sieve[q] == q: sieve[q] = p p += 1 return sieve def factorization(self, n:int): tmp = {} while n > 1: i=self.sieve[n] tmp[i]=tmp.get(i,0)+1 n //= self.sieve[n] return tmp def divisors(self, n:int): res = [1] prime = self.factorization(n) for p in prime: newres = [] for d in res: for j in range(prime[p]+1): newres.append(d*p**j) res = newres res.sort() return res N=int(input()) A=list(map(int,input().split())) ans = [0]*(10**5+1) div = tmp(10**5) for a in A: x=0 for d in div.divisors(a): xx = ans[d] if xx>x: x=xx ans[a]=x+1 print(max(ans))