#include using ll = long long; using namespace std; template inline void chmax(T & a, T const & b) { a = max(a, b); } vector sieve_of_eratosthenes(int n) { // enumerate primes in [2,n] with O(n log log n) vector is_prime(n + 1, true); is_prime[0] = is_prime[1] = false; for (int i = 2; i * i <= n; ++ i) if (is_prime[i]) for (int k = 2 * i; k <= n; k += i) is_prime[k] = false; return is_prime; } vector list_primes(int n) { auto is_prime = sieve_of_eratosthenes(n); vector primes; for (int i = 2; i <= n; ++ i) if (is_prime[i]) primes.push_back(i); return primes; } map prime_factorize(ll n, vector const & primes) { map result; for (int p : primes) { if (n < p *(ll) p) break; while (n % p == 0) { result[p] += 1; n /= p; } } if (n != 1) result[n] += 1; return result; } vector primes = list_primes(1e6 + 100); unordered_map memo; ll longest_sequence(ll a) { if (memo.count(a)) return memo[a]; if (a == 1) return memo[a] = 1; ll acc = 0; for (auto pk : prime_factorize(a, primes)) { ll p = pk.first; chmax(acc, 1 + longest_sequence(a / p) * p); } return memo[a] = acc; } int main() { int n; cin >> n; ll result = 0; while (n --) { ll a; cin >> a; result += longest_sequence(a); } cout << result << endl; return 0; }