#include using namespace std; typedef long long ll; typedef vector vi; typedef map mii; ll _sieve_size; bitset<10000010> bs; vi primes; void sieve(ll upperbound) { _sieve_size = upperbound + 1; bs.set(); bs[0] = bs[1] = 0; for (ll i = 2; i <= _sieve_size; i++) if (bs[i]) { for (ll j = i * i; j <= _sieve_size; j += i) bs[j] = 0; primes.push_back((int)i); } } bool isPrime(ll N) { if (N <= _sieve_size) return bs[N]; for (int i = 0; i < (int)primes.size(); i++) if (N % primes[i] == 0) return false; return true; } ll maxPF(ll N) { ll PF_idx = 0, PF = primes[PF_idx], max = INT_MIN; while (N != 1 && (PF * PF <= N)) { if(N % PF == 0){ if(PF > max) max = PF; } while (N % PF == 0) { N /= PF; } PF = primes[++PF_idx]; } if (N != 1) return N; // it means that N is prime return max; } long solve(long x){ long res = 1,PF,old_parts=1,new_parts; while(x!=1){ PF = maxPF(x); new_parts = old_parts*PF; res += new_parts; old_parts = new_parts; //cout << new_parts << " "; x = x/PF; } return res; } long longestSequence(vector a) { long res = 0; for(int i = 0 ; i < a.size(); i++){ long to_solve = a[i]; res += solve(to_solve); } return res; } int main() { sieve(10000000); int n; cin >> n; vector a(n); for(int a_i = 0; a_i < n; a_i++){ cin >> a[a_i]; } long result = longestSequence(a); cout << result << endl; //cout << solve(6) << " "; return 0; }