k = int(eval(input()))

import math

from functools import reduce

total = 0

for i in range(1,k+1):

    for j in range(1,k+1):

        for l in range(1,k+1):

            total += reduce(math.gcd,(i,j,l))



print(total)

import collections



def gcd(a,b):

 if b==0:

   return a

 else:

   return gcd(b,a%b)



k=int(eval(input()))

cnt=collections.defaultdict(int)

for i in range(1,k+1): #すべての(a,b)の組についてgcd(a,b)を求め、その値の個数を数える

 for j in range(1,k+1):

   cnt[gcd(i,j)]+=1

ans=0

for i in range(1,k+1): #すべてのcについて、上で求めたgcd(a,b)のあり得る値とのgcdを求め、答えに足し合わせる

 for key in list(cnt.keys()):

   ans+=gcd(i,key)*cnt[key]

print(ans)
k = int(eval(input()))
import math
from functools import reduce

total = 0
for i in range(1, k + 1):
    for j in range(1, k + 1):
        for l in range(1, k + 1):
            total += reduce(math.gcd, (i, j, l))
print(total)

import collections


def gcd(a, b):
    if b == 0:
        return a
    else:
        return gcd(b, a % b)


k = int(eval(input()))
cnt = collections.defaultdict(int)
for i in range(1, k + 1):  # すべての(a,b)の組についてgcd(a,b)を求め、その値の個数を数える
    for j in range(1, k + 1):
        cnt[gcd(i, j)] += 1
ans = 0
for i in range(1, k + 1):  # すべてのcについて、上で求めたgcd(a,b)のあり得る値とのgcdを求め、答えに足し合わせる
    for key in list(cnt.keys()):
        ans += gcd(i, key) * cnt[key]
print(ans)

+import collections + + +def gcd(a, b): +    if b == 0: +        return a +    else: +        return gcd(b, a % b) + + -import math -from functools import reduce - -total = 0 -for i in range(1, k + 1): +cnt = collections.defaultdict(int) +for i in range(1, k + 1):  # すべての(a,b)の組についてgcd(a,b)を求め、その値の個数を数える -        for l in range(1, k + 1): -            total += reduce(math.gcd, (i, j, l)) -print(total) +        cnt[gcd(i, j)] += 1 +ans = 0 +for i in range(1, k + 1):  # すべてのcについて、上で求めたgcd(a,b)のあり得る値とのgcdを求め、答えに足し合わせる +    for key in list(cnt.keys()): +        ans += gcd(i, key) * cnt[key] +print(ans)