# 解き方が一見わからないときはdpを疑うべき # 制約がdp内であればdpを疑うべき # dp[i番目までを見て][最後の選んだ数がjのときの]最大連結数 N = int(input()) A = list(map(int, input().split())) maxA = max(A) dp = [[0]*(maxA+1) for i in range(N+1)] for i in range(1, N+1): num = A[i-1] mx = 0 for j in range(1, maxA+1): dp[i][j] = dp[i-1][j] if num%j == 0: mx = max(mx, dp[i-1][j]) dp[i][num] = mx+1 #print(dp[i]) ans = max(dp[N]) print(ans)