#define _CRT_SECURE_NO_WARNINGS #include <iostream> #include <stdio.h> #include <vector> #include <memory> #include <algorithm> #include <numeric> #include <string> #include <set> #include <tuple> #include <functional> #include <cstring> #include <deque> #include <array> #include <map> #include <random> #include <unordered_map> #undef max #undef min #ifdef __GNUC__ #pragma GCC diagnostic ignored "-Wunused-result" #endif #ifdef _DEBUG #define ASSERT(x) if(!(x)) __debugbreak() #else char *crash_please=(char *)42; #define ASSERT(x) //if(!(x)) { printf("%s failed",#x); *crash_please=33; } #endif #include <chrono> class cLogPerformance_Guard { std::chrono::time_point<std::chrono::high_resolution_clock> mStartTime=std::chrono::high_resolution_clock::now(); const char *mName; public: cLogPerformance_Guard(const char *Name): mName(Name) {} ~cLogPerformance_Guard() { auto EndTime=std::chrono::high_resolution_clock::now(); auto Elapsed=std::chrono::duration_cast<std::chrono::milliseconds>(EndTime-mStartTime); // printf("--- Elapsed %llu ms in %s ---\n", (unsigned long long)Elapsed.count(), mName); } }; using namespace std; using namespace std::string_literals; using ull=unsigned long long; using ll=long long; constexpr ll mod=1'000'000'007; template<class I> auto rev(I i) { return std::reverse_iterator<I>(i); } #define RI(var_name) int var_name; scanf("%d", &var_name); #define RIV(var_name, size) vector<int> var_name(size); for(auto &item_of_##var_name: var_name) scanf("%d", &item_of_##var_name); #define RII(var_name1, var_name2) int var_name1, var_name2; scanf("%d %d", &var_name1, &var_name2); #define RIII(var_name1, var_name2, var_name3) int var_name1, var_name2, var_name3; scanf("%d %d %d", &var_name1, &var_name2, &var_name3); #define RIIII(var_name1, var_name2, var_name3, var_name4) int var_name1, var_name2, var_name3, var_name4; scanf("%d %d %d %d", &var_name1, &var_name2, &var_name3, &var_name4); #define RL(var_name) ll var_name; scanf("%lld", &var_name); #define RLV(var_name, size) vector<ll> var_name(size); for(auto &item_of_##var_name: var_name) scanf("%lld", &item_of_##var_name); #define RLL(var_name1, var_name2) ll var_name1, var_name2; scanf("%lld %lld", &var_name1, &var_name2); #define RLLL(var_name1, var_name2, var_name3) ll var_name1, var_name2, var_name3; scanf("%lld %lld %lld", &var_name1, &var_name2, &var_name3); #define RLLLL(var_name1, var_name2, var_name3, var_name4) ll var_name1, var_name2, var_name3, var_name4; scanf("%lld %lld %lld %lld", &var_name1, &var_name2, &var_name3, &var_name4); #define RD(var_name) double var_name; scanf("%lf", &var_name); #define RDV(var_name, size) vector<double> var_name(size); for(auto &item_of_##var_name: var_name) scanf("%d", &item_of_##var_name); #define RDD(var_name1, var_name2) double var_name1, var_name2; scanf("%lf %lf", &var_name1, &var_name2); #define RDDD(var_name1, var_name2, var_name3) double var_name1, var_name2, var_name3; scanf("%lf %lf %lf", &var_name1, &var_name2, &var_name3); #define ALL(cont) cont.begin(), cont.end() #define FOR(var, max_value) for(int var=0;var<max_value;++var) //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// const size_t pregen_p_s=1'000'001; char is_not_prime[pregen_p_s]={ 0 }; vector<ll> primes; vector<pair<ll, ll>> factorization; // prime, count void CalcFactorization(ll x) { factorization.clear(); for(int i=0;i<(int)primes.size();++i) { again: if(x%primes[i]==0) { if(!factorization.empty()&&factorization.back().first==primes[i]) ++factorization.back().second; else factorization.emplace_back(primes[i], 1); x/=primes[i]; goto again; } } if(x!=1) factorization.emplace_back(x, 1); reverse(ALL(factorization)); } void Solve() { RI(n); ll result=0; for(int i=0; i<n; ++i) { RL(x); if(x==1) { result+=1; continue; } result+=1; CalcFactorization(x); ll prod=1; for(auto fp: factorization) { for(int j=0; j<fp.second; ++j) { prod*=fp.first; result+=prod; } } } printf("%lld", result); } int Init() { primes.reserve(100'000); for(int i=2; i<pregen_p_s; ++i) { if(!is_not_prime[i]) { primes.push_back(i); for(int j=i*2; j<pregen_p_s; j+=i) { is_not_prime[j]=1; } } } int t=1; //RI(t); return t; } int main() { // std::ios::sync_with_stdio(false); int t=Init(); for(int tc=1; tc<=t; ++tc) { // printf("Case #%d: ", tc); Solve(); } }