#include using namespace std; using vi = vector; using vl = vector; #define FORI(s,n,g) for(int i = s; i < n; i+=g) /// unordered_map um; long get_moves (long n) { auto it = um.find (n); if (it != um.end ()) return it->second; if (n == 1) return 1; vl num; long nn = n; while (n%2 == 0) { num.push_back (2); n /= 2; //cout << 2 << ' '; } int i = 3; while (n > 1) { while (n%i == 0) { num.push_back (i); n /= i; //cout << i << ' '; } i += 2; if (i > sqrt (nn)) break; } //if (num.size () == 1 && nn/num[0] > sqrt (nn)) num.push_back (nn/num[0]); if (n > 2) num.push_back (n); if (num.size () == 0) num.push_back (nn); long moves = 1; long t = num.empty () ? 0 : *num.rbegin (); for (int i = num.size () - 1; i >= 0; i--) { if (i != num.size () - 1) t *= num[i]; moves += t; um[t] = moves; } return moves; } int main() { int n; cin >> n; /*FORI (2, 50, 1) { cout << i << ": " << get_moves (i) << endl; }*/ long res = 0; vl v (n); FORI (0, n, 1) cin >> v[i]; sort (v.begin (), v.end ()); reverse (v.begin (), v.end ()); FORI (0, n, 1) { res += get_moves (v[i]); } cout << res << endl; }