#include <bits/stdc++.h>
using namespace std;
const int N = 3e5 + 9;
int n, mem[200001][3];
int arr[200000];
vector<int> sets[200000];
vector<int> ids[200000];
int solve(int i, bool took) {
  if (i == n) return 0;
  if (mem[i][took] != -1) return mem[i][took];
  int ret = 0;
  if (!took) ret = solve(i + 1, 0);
  for (int j = 0; j < sets[i].size(); j++) {
    int cur_set = sets[i][j];
    if (cur_set == 1) continue;
    int pos = lower_bound(ids[cur_set].begin(), ids[cur_set].end(), i) -
              ids[cur_set].begin();
    if (pos == ids[cur_set].size() - 1) continue;
    ret = max(ret, solve(ids[cur_set][pos + 1], 1) + 1);
  }
  return mem[i][took] = ret;
}
void get_sets(int i) {
  for (int j = 1; j * j <= arr[i]; j++)
    if (arr[i] % j == 0) {
      sets[i].push_back(j);
      ids[j].push_back(i);
      if (arr[i] / j != j)
        sets[i].push_back(arr[i] / j), ids[arr[i] / j].push_back(i);
    }
}
int main() {
  ios::sync_with_stdio(0);
  cin.tie(0);
  ios_base::sync_with_stdio(0);
  memset(mem, -1, sizeof mem);
  cin >> n;
  for (int i = 0; i < n; i++) cin >> arr[i], get_sets(i);
  cout << solve(0, 0) + 1 << '\n';
  return 0;
}
