#include <bits/stdc++.h>
using namespace std;
#define int long long
inline int gcd(int a, int b)
{
if (!b)
return a;
else
return gcd(b, a % b);
}
int n;
int ans;
inline int phi(int x)
{
int ans = x;
for (int i = 2; i * i <= x; i ++ )
if (x % i == 0)
{
ans = ans / i * (i - 1);
while (x % i == 0) x = x / i;
}
if (x > 1) ans = ans / x * (x - 1);
return ans;
}
signed main()
{
cin >> n;
for (int i = 1; i * i<= n; i ++ )
{
if (n % i == 0)
{
ans += i * phi(n / i);
if (i * i != n)
ans += (n / i) * phi(n / (n / i));
}
}
cout << ans << endl;
return 0;
}
#include <bits/stdc++.h>
using namespace std;
#define int long long
const int N = 1e7;
const int M = 1e7;
int n, m;
int T;
int prime[N], mu[N], cnt;
bool st[N];
int sum[N];
int f[N];
inline void init()
{
mu[1] = 1;
for (int i = 2; i <= M; i ++ )
{
if (!st[i])
{
prime[ ++ cnt] = i;
mu[i] = -1;
}
for (int j = 1; prime[j] * i <= M; j ++ )
{
st[prime[j] * i] = true;
if (i % prime[j] == 0)
break;
mu[prime[j] * i] = -mu[i];
}
}
for (int i = 1; i <= cnt; i ++ ) // 这里是用来预处理 μ 的
for (int j = 1; prime[i] * j <= M; j ++ )
f[j * prime[i]] += mu[j];
for (int i = 1; i <= M; i ++ )
sum[i] = sum[i - 1] + f[i];
}
inline int g(int k, int x)
{
return k / (k / x);
}
signed main()
{
init();
cin >> T;
while (T -- )
{
cin >> n >> m;
int k = min(n, m);
int res = 0;
for (int l = 1, r; l <= k; l = r + 1)
{
r = min(k, min(g(n, l), g(m, l))); // 确定块长
res += (sum[r] - sum[l - 1]) * (n / l) * (m / l);
}
cout << res << endl;
}
return 0;
}