#include using namespace std; typedef unsigned int ui; typedef unsigned long ul; typedef long long ll; typedef unsigned long long ull; typedef vector vi; typedef vector vui; typedef vector vvi; typedef pair ii; typedef vector vii; const int INF = int (1e9) + int (1e5); const ll INFL = ll(2e18) + ll(1e10); const ui M = 1E9 + 7; const double eps = 1e-9; vi primes; unordered_map memo; void erat(unsigned int limit) { vector prime(limit + 1, true); const unsigned int n = sqrt(limit); unsigned int i, j; for(i = 3; i <= n; i += 2) { if(prime[i]) {for(j = i * i; j <= limit; j += i) prime[j] = false;} } primes.push_back(2); for(i = 3; i <= limit; i += 2) {if(prime[i]) primes.push_back(i);} } map fact(ll n) { map ret; int idx=0; ll p=primes[0]; while (p*p<=n) { while(!(n % p)) { ret[p]++; n /= p; } p = primes[++idx]; } if(n > 1) ret[n]++; return ret; } void divisores(const map &f, vector &divs, map::iterator it, ll n = 1) { if(it == f.begin()) divs.clear(); if(it == f.end()) { divs.push_back(n); return; } ll p = it->first, k = it->second; ++it; for(int i = 0; i <= k; i++) divisores(f, divs, it, n), n *= p; } ll count(ll x){ if (x==1) return 1; if (x==2) return 3; if (memo.find(x)!=memo.end()) return memo[x]; ll ret=x+1; vector divs; map fac = fact(x); divisores(fac,divs,fac.begin()); for (ll d: divs) if (d>1LL && d a) { erat(2E6); ll cnt=0; for (ll ia : a) cnt += count(ia); return cnt; } int main() { int n; cin >> n; vector a(n); for(int a_i = 0; a_i < n; a_i++){ cin >> a[a_i]; } ll result = longestSequence(a); cout << result << endl; return 0; }