#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include // c++11 #include #include #include #include #define mp make_pair #define mt make_tuple #define rep(i, n) for (int i = 0; i < (n); i++) using namespace std; using ll = long long; using ull = unsigned long long; using pii = pair; const int INF = 1 << 29; const ll LL_INF = 1LL << 60; const double EPS = 1e-9; const ll MOD = 1000000007; const int dx[] = {1, 0, -1, 0}, dy[] = {0, -1, 0, 1}; int N; vector A; vector primes; const ll MAX_A = 1000000000010LL; const int MAX_P = 1000010; bool is_not_prime[MAX_P]; void sieve() { for (ll i = 2; i < MAX_P; i++) { if (!is_not_prime[i]) { for (ll j = i * i; j < MAX_P; j += i) { is_not_prime[j] = true; } } } for (ll i = 2; i < MAX_P; i++) { if (!is_not_prime[i]) { primes.push_back(i); } } } ll solve(ll a) { vector p; int i = 0; while (a > 0){ while (a % primes[i] == 0){ p.push_back(primes[i]); a /= primes[i]; } i++; if (i >= primes.size()){ break; } } if (a != 1){ p.push_back(a); } sort(p.rbegin(), p.rend()); ll res = 1; ll cnt = 1; for (auto &val : p){ cnt *= val; res += cnt; } return res; } int main() { cin >> N; ll result = 0; sieve(); for (int i = 0; i < N; i++) { ll a; cin >> a; result += solve(a); } cout << result << endl; }