#include using namespace std; vector primes; void calcPrimes(long maxVal) { long stopVal = sqrt(maxVal) + 1; vector used(stopVal+1); for (long v = 2; v <= stopVal; ++v) { if (!used[v]) { primes.push_back(v); for (long x = v; x <= stopVal; x += v) { used[x] = true; } } } //cout << "primes is " << primes.size() << " " << primes[0] << endl; } long getMax(long v) { if (v <=1) return v; for (int pos = 0; pos < primes.size() && primes[pos]*primes[pos] <= v; ++pos) { //cout << "checking " << v << "," << pos << " and " << primes[pos] << endl; if ((v % primes[pos]) == 0) { long pieces = v/primes[pos]; return v + getMax(v/primes[pos]); } } return 1+v; } long longestSequence(vector a) { long rv = 0; for (int i = 0; i < a.size(); ++i) { long curMax = getMax(a[i]); rv += curMax; } return rv; } int main() { int n; cin >> n; vector a(n); long maxVal = 0; for(int a_i = 0; a_i < n; a_i++){ cin >> a[a_i]; maxVal = max(maxVal, a[a_i]); } calcPrimes(maxVal); long result = longestSequence(a); cout << result << endl; return 0; }