#include using namespace std; const int N = 1e6 + 5; const int SIZE = 105; bool is[N]; vector p; long long a[SIZE]; vector fac[SIZE]; vector> prime[SIZE]; void dfs(int at, int i, long long num) { if (i == prime[at].size()) { fac[at].push_back(num); return; } for (int j = 0; j <= prime[at][i].second; j++) { dfs(at, i + 1, num); num *= prime[at][i].first; } } map dp; long long solve(long long n, int at) { if (n == 1) return 1; if (dp.count(n)) return dp[n]; long long ans = 1; for (auto it : fac[at]) { if (it == 1) continue; if (n % it == 0) { ans = max(ans, it * solve(n / it, at) + 1); } } return dp[n] = ans; } int main() { for (int i = 2; i < N; i++) { if (!is[i]) { p.push_back(i); } for (int j = 0; j < p.size() && 1LL * i * p[j] < N; j++) { is[i * p[j]] = 1; if (i % p[j] == 0) break; } } int n; scanf("%d", &n); for (int i = 0; i < n; i++) { scanf("%lld", a + i); long long now = a[i]; for (auto it : p) { int cur = 0; while (now % it == 0) { cur++; now /= it; } if (cur) { prime[i].emplace_back(it, cur); } } if (now > 1) { prime[i].emplace_back(now, 1); } } long long ans = 0; for (int i = 0; i < n; i++) { dfs(i, 0, 1); ans += solve(a[i], i); } cout << ans << endl; return 0; }