#include using namespace std; #define int long long // <-----!!!!!!!!!!!!!!!!!!! #define rep(i,n) for (int i=0;i<(n);i++) #define rep2(i,a,b) for (int i=(a);i<(b);i++) #define rrep(i,n) for (int i=(n)-1;i>=0;i--) #define rrep2(i,a,b) for (int i=(b)-1;i>=(a);i--) #define all(a) (a).begin(),(a).end() typedef long long ll; typedef pair Pii; typedef tuple TUPLE; typedef vector V; typedef vector VV; typedef vector VVV; typedef vector> Graph; const int inf = 1e9; const int mod = 1e9 + 7; // 自身以外の約数を列挙(12 -> {1, 2, 3, 6}, 8 -> {1, 2, 4}) vector divisor(int n) { if (n == 1) return {}; vector res; for (int i = 1; i * i <= n; i++) { if (n % i == 0) { res.emplace_back(i); if (i != 1 && i != n / i) res.emplace_back(n / i); } } return res; } signed main() { std::ios::sync_with_stdio(false); std::cin.tie(0); int N; cin >> N; V a(N); rep(i, N) cin >> a[i]; sort(all(a)); const int MAX = 1e6 + 1; V dp(MAX); for (auto x : a) { dp[x] = 1; auto v = divisor(x); for (auto y : v) { dp[x] = max(dp[x], dp[y] + 1); } // rep(z, 10) { // cout << dp[z] << " "; // } // cout << endl; } cout << *max_element(all(dp)) << endl; }