#pragma GCC optimize("O3")
#pragma GCC target("avx")
#include <stdio.h>
#include <stdlib.h>
#define min(a, b) ((a) < (b) ? (a) : (b))
#define max(a, b) ((a) > (b) ? (a) : (b))
#define abs(a) ((a) > 0 ? (a) : (-1 * (a)))
#define rep(i, n) for ((i) = 0; (i) < (n); (i)++)
#define rep2(i, s, e) for ((i) = (s); (i) < (e); (i)++)
#define LIM (1000000007)

////int g[220][220][220];

void sw(int *a, int *b)
{
    int c = a[0];
    a[0] = b[0];
    b[0] = c;
}

int gcd2(int a, int b)
{
    while (1)
    {
        b %= a;
        if (b == 0)
            return a;
        sw(&a, &b);
    }
}

int gcd(int i, int j, int k)
{
    if (i > j)
        sw(&i, &j);
    if (j > k)
        sw(&j, &k);
    if (i > j)
        sw(&i, &j);
    //   if (g[i][j][k] != 0)
    //       return g[i][j][k];

    //printf("%d %d %d\n", i, j, k);
    while (1)
    {
        if (i == 1 || j == 1 || k == 1)
        {
            //            g[i][j][k] = 1;
            return 1;
        }
        k %= i;
        if (k == 0)
        {
            //           g[i][j][k] = gcd2(i, j);
            //           return g[i][j][k];
            return gcd2(i, j);
        }
        sw(&j, &k);
        sw(&i, &k);
    }
}

int main(void)
{

    int n, i, j, k, cnt = 0;
    scanf("%d", &n);
    rep2(i, 1, n + 1)
    {
        rep2(j, 1, n + 1)
        {
            rep2(k, 1, n + 1)
            {
                //               printf("%d %d %d\n", i, j, k);
                cnt += gcd(i, j, k);
            }
        }
    }
    printf("%d", cnt);

    return 0;
}
