#include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; #define f first #define s second #define mp make_pair #define pb push_back #define pii pair #define vi vector #define all(v) (v).begin(), (v).end() #define sz(v) (int)((v).size()) #define forit(it,v) for (__typeof(v.begin()) it = v.begin(); it != v.end(); ++it) #define f0(a) memset(a, 0, sizeof(a)) #define ll long long vector primes; map answer; bool isprime[(int)2e6]; vector pp; void factorize(ll n) { primes.clear(); for (int p: pp) { if (n % p == 0) { while (n % p == 0) n /= p; primes.push_back(p); } if (1LL * p * p > n) break; } if (n > 1) primes.push_back(n); } ll calc(ll n) { if (n == 1) return 1; if (answer[n] > 0) return answer[n]; ll ans = 0; for (auto p: primes) { if (n % p == 0 && p > 1) { ans = max(ans, 1 + calc(n / p) * p); } } answer[n] = ans; return ans; } ll solve(ll n) { factorize(n); return calc(n); } int main() { int m = 1e6; for (int i = 2; i <= m; ++i) isprime[i] = true; for (int i = 2; i * i <= m; ++i) if (isprime[i]) { for (int j = i * i; j <= m; j += i) isprime[j] = false; } for (int i = 2; i <= m; ++i) if (isprime[i]) pp.push_back(i); int n; cin >> n; ll ans = 0; for (int i = 0; i < n; ++i) { ll t; cin >> t; ans += solve(t); } cout << ans << endl; return 0; }