#include #include #include #include #include using namespace std; const long long kernel[] = {2,3,5,7,11,13,17,19,23}; vector primes; void genPrimes(long long desired){ if(!primes.size())primes.insert(primes.begin(), kernel, kernel + 9); if(*primes.rbegin() >= desired)return; long long n = min(*primes.rbegin() * *primes.rbegin(), desired); for(long long j = *primes.rbegin() + 1; j <= n; j++){ long long i = 0; for(; i < primes.size() && primes[i]*primes[i] <= n; i++){ if(j % primes[i] == 0){ i = -1; break; } }if(i >= 0){ primes.push_back(j); } } if(n + 1 < desired)genPrimes(desired); } void factorize(long long n, vector& out){ long long k = 0; bool b = false; while(n > 1){ b = false; while(k < primes.size() && primes[k]*primes[k] <= n){ if(n % primes[k] == 0){ b = true; break; } k++; } if(!b){ out.push_back(n); return; } out.push_back(primes[k]); n /= primes[k]; } } int main(){ long long n; cin >> n; long long mx = 0; vector a(n); for (int i = 0; i < n; i++) { cin >> a[i]; if(a[i] > mx)mx = a[i]; } genPrimes(sqrt(mx)+1); long long total = 0; for(int i = 0; i < n; i++){ vector factors; factorize(a[i], factors); long long k = 1; long long c = 1; for(int i = factors.size() - 1; i >= 0; i--){ c *= factors[i]; k += c; }total += k; } cout << total << endl; return 0; }