#include using namespace std; map dp; map :: iterator it; vector divisors; void getDivisors(long long n) { for(long long i = 1; i * 1LL * i <= n; i++) { if(n % i == 0) { divisors.push_back(i); if(i != n / i) divisors.push_back(n / i); } } return ; } long long recurse(long long ans) { if(ans == 1) return 1LL; it = dp.find(ans); if(it != dp.end()) return (*it).second; long long maxi = 0LL; for(long long i = 0; i < divisors.size(); i++) { long long temp = divisors[i]; if(temp != 1 && temp <= ans && (ans % temp) == 0) maxi = max(maxi, temp * recurse(ans / temp) + 1); } return dp[ans] = maxi; } int main() { long long ans = 0, n; long long t, x, y, z, a, b, c; scanf("%lld", &t); while(t--) { scanf("%lld", &n); divisors.clear(); getDivisors(n); ans += recurse(n); } printf("%lld\n", ans); return 0; }