//HackerRank - Breaking Sticks - WCS 12 C #include using namespace std; const int N = 10000000 ; int lp [ N + 1 ] ; vector < int > pr ; void sieve() { for ( int i = 2 ; i <= N ; ++ i ) { if ( lp [ i ] == 0 ) { lp [ i ] = i ; pr. push_back ( i ) ; } for ( int j = 0 ; j < ( int ) pr. size ( ) && pr [ j ] <= lp [ i ] && i * pr [ j ] <= N ; ++ j ) lp [ i * pr [ j ] ] = pr [ j ] ; } } int main() { ios::sync_with_stdio(false); sieve(); int n; int64_t a[110]; cin >> n; for (int i = 0; i < n; i++) cin >> a[i]; int64_t ans = n; for (int i = 0; i < n; i++) { int64_t x = a[i]; for (const auto &p : pr) { while (x % p == 0) { ans += x; x /= p; } } if (x > 1) ans += x; } cout << ans << endl; return 0; }