# 2次元dpで間に合うのか? 10**5の2乗になるのでは? N = int(input()) A = list(map(int, input().split())) maxA = max(A) def divisors(n): lower_divisors , upper_divisors = [], [] i = 1 while i*i <= n: if n % i == 0: lower_divisors.append(i) if i != n // i: upper_divisors.append(n//i) i += 1 return lower_divisors + upper_divisors[::-1] dp = [0]*(maxA+1) for a in A: divs = divisors(a)[::-1] # 自身を参照するときにオーバーカウントしないように自身を最初に参照 for d in divs: dp[a] = max(dp[a], dp[d]+1) #print('a', a, dp) ans = max(dp) print(ans)