#include <bits/stdc++.h>
using namespace std;
int isp[100010], p[100010];
int x[100010];
vector<int> d[100010];
int last[10010];
int sieve(int n) {
  fill(isp, isp + n + 1, 1);
  isp[0] = isp[1] = 0;
  for (int i = 0; i < (n); i++) x[i] = i;
  int c = 0;
  for (int i = 2; i < (n + 1); i++)
    if (isp[i]) {
      isp[i] = 1;
      p[c] = i;
      d[i].push_back(c);
      for (int j = i * 2; j <= n; j += i) {
        isp[j] = 0;
        d[j].push_back(c);
      }
      c++;
    }
  return c;
}
int n, a[100010];
int dp[100010];
int main() {
  cin.tie(0);
  ios_base::sync_with_stdio(0);
  cin >> n;
  for (int i = 0; i < (n); i++) cin >> a[i];
  int P = sieve(100000);
  int ans = 0;
  for (int i = 0; i < (n); i++) {
    dp[i] = 1;
    for (int j = 0; j < (((int)d[a[i]].size())); j++) {
      dp[i] = max(dp[i], 1 + last[d[a[i]][j]]);
    }
    ans = max(dp[i], ans);
    for (int j = 0; j < (((int)d[a[i]].size())); j++) {
      last[d[a[i]][j]] = max(last[d[a[i]][j]], dp[i]);
    }
  }
  cout << ans << endl;
}
