#include using namespace std; long smallestFactor(long num) { for (int i = 2; i < num; i++) { if (num%i == 0) return i; } return num; } bool isPrime(long num) { if(num == 1) return false; for (int i = 2; i < num/2; i++) { if (num % i == 0) return false; } return true; } long stickSequence(long n) { if (n == 1) return 1; if (n % 2 == 0) return n + stickSequence(n/2); if (isPrime(n)) return n + 1; if (n % 2 != 0) { long fac = smallestFactor(n); return n + stickSequence(n/fac); } return 0; } long longestSequence(vector a) { // Return the length of the longest possible sequence of moves. long length = 0; for(int i = 0; i < a.size(); i++) { length += stickSequence(a[i]); } return length; } 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; }