#include #include using namespace std; #define ll long unordered_map store; ll max(ll a, ll b){ if(a > b) return a; return b; } ll largest_prime(ll n){ ll ans = 1; while (n%2 == 0) { //printf("%d ", 2); ans = 2; n = n/2; } // n must be odd at this point. So we can skip // one element (Note i = i +2) for (ll i = 3; i <= sqrt(n); i = i+2) { // While i divides n, print i and divide n while (n%i == 0) { //printf("%d ", i); ans = i; n = n/i; } } // This condition is to handle the case when n // is a prime number greater than 2 if (n > 2) ans = n; return ans; } ll divide(ll n){ //cout << n << endl; if(n == 1) return 1; ll ans = largest_prime(n); return 1 + ans*divide(n/ans); } long longestSequence(vector ar) { // Return the length of the longest possible sequence of moves. long ans = 0; for( long a: ar ){ ans += divide(a); } return ans; } 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; }