#include using namespace std; unordered_map memo; long longestDivide(long x) { auto mi = memo.find(x); if (mi != memo.end()) { return mi->second; } int ret = 0; for (long i = 2; i <= x / 2; ++i) { if (x % i == 0) { ret = max(ret, i * (longestDivide(x / i) + 1)); } } if (ret == 0) ret = x; memo.insert(make_pair(x, ret)); return ret; } long longestSequence(vector a) { // Return the length of the longest possible sequence of moves. long ret = 0; for (int i = 0; i < a.size(); ++i) { if (a[i] > 1) ret += longestDivide(a[i]) + 1; else ret += a[i]; } return ret; } int main() { int n; cin >> n; vector a(n); for(int a_i = 0; a_i < n; a_i++){ cin >> a[a_i]; } long result = longestSequence(a); cout << result << endl; return 0; }