typedef long long LL;
const int maxn = 100008 ;
bool is[maxn] ;
int ps ;
int prime[maxn] ;
void make(){
memset(is , 0 , sizeof(is)) ;
ps = 0 ;
for(int i = 2 ; i < maxn ; i++){
if(! is[i]) prime[ps++] = i ;
for(int j = 0 ; j < ps && i * prime[j] < maxn ; j++){
is[i * prime[j]] = 1 ;
if(i % prime[j] == 0) break ;
}
}
}
vector< pair<int , int> > get_pfactor(LL n){
vector< pair<int , int> > plis ;
plis.clear() ;
for(int i = 0 ; i < ps && (LL)prime[i] * (LL)prime[i] <= n ; i++){
if(n % prime[i] == 0){
int c = 0 ;
while(n % prime[i] == 0){
c++ ;
n /= prime[i] ;
}
plis.push_back(make_pair(prime[i] , c)) ;
}
}
if(n != 1) plis.push_back(make_pair(n , 1)) ;
return plis ;
}
LL eulor(LL n){
LL s = n ;
for(int i = 0 ; i < ps && (LL)prime[i] * (LL)prime[i] <= n ; i++){
if(n % prime[i] == 0){
s = s * (prime[i] - 1) / prime[i] ;
while(n % prime[i] == 0) n /= prime[i] ;
}
}
if(n != 1) s = s * (n - 1) / n ;
return s ;
}
LL Pow(LL x , LL y){
if(y < 0) return 0 ;
LL s = 1 ;
for(; y ; y >>= 1){
if(y & 1) s *= x ;
x *= x ;
}
return s ;
}
LL ans(LL n){
LL s = 1 ;
vector< pair<int , int> > plis = get_pfactor(n) ;
for(int j = 0 ; j < plis.size() ; j++){
LL p = plis[j].first ;
LL k = plis[j].second ;
LL f = 0 ;
LL pi = 1 ;
for(int i = 0 ; i <= k ; i++){
f += pi * eulor(Pow(p , k - i)) ;
// 或 f += pi * (Pow(p , k - i) - Pow(p , k - i - 1)) ;
pi *= p ;
}
s *= f ;
}
return s ;
}
int main(){
make() ;
LL n ;
while(cin>>n){
cout<< ans(n) << endl ;
}
return 0 ;
}