#include <bits/stdc++.h>
using namespace std;
int fact[100005];
bitset<100005> p;
int cnt[100005];
int best[100005];
int arr[100005];
int bestFactor(int n) {
  if (fact[n] == 0) {
    return n;
  }
  int curFactor = fact[n];
  int bestChildFactor = bestFactor(n / curFactor);
  if (best[curFactor] == -1) {
    return bestChildFactor;
  }
  if (best[bestChildFactor] == -1) {
    return curFactor;
  }
  if (cnt[best[curFactor]] > cnt[best[bestChildFactor]]) {
    return curFactor;
  }
  return bestChildFactor;
}
void updateFactors(int n, int idx) {
  if (fact[n] == 0) {
    best[n] = idx;
    return;
  }
  best[fact[n]] = idx;
  return updateFactors(n / fact[n], idx);
}
int main() {
  memset(best, -1, sizeof best);
  p.set();
  p[0] = p[1] = false;
  for (int i = 2, to = sqrt(100005) + 1; i <= to; i++) {
    if (p[i]) {
      for (int j = i * i; j < 100005; j += i) {
        if (fact[j] == 0) fact[j] = i;
        p[j] = false;
      }
    }
  }
  int n;
  scanf("%d", &n);
  for (int i = 0; i < n; i++) {
    scanf("%d", &arr[i]);
    cnt[i] = 1;
  }
  updateFactors(arr[0], 0);
  int maxi = 1;
  for (int i = 1; i < n; i++) {
    int bestFact = bestFactor(arr[i]);
    if (best[bestFact] != -1) {
      cnt[i] = cnt[best[bestFact]] + 1;
      maxi = max(maxi, cnt[i]);
    }
    updateFactors(arr[i], i);
  }
  cout << maxi;
  return 0;
}
