#include <bits/stdc++.h>

using namespace std;

typedef long long ll;
typedef vector<int> vi;
typedef map<int, int> 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 <long> 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<long> 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;
}