#pragma warning( disable : 6031)

#include <stdio.h>
#include <vector>
#include <string>
#include <queue>
#include <map>
#include <math.h>
int minimum(int a, int b) { return a < b ? a : b; }
int maximum(int a, int b) { return a > b ? a : b; }
//const long long mod = 1000000007;
const long long mod = 998244353;
using std::vector;
using std::pair;
using std::string;
using std::map;
int euclidean_gcd(int a, int b) {
	if (a < b) return euclidean_gcd(b, a);
	int r;
	while ((r = a % b)) {
		a = b;
		b = r;
	}
	return b;
}
int euclidean_gcd(int a, int b, int c) {
	return	euclidean_gcd(euclidean_gcd(a, b), c);
}
int main() {
	int K;
	scanf("%d", &K);
	int res = 0;
	for (int i = 0; i < K; i++) {
		for (int j = 0; j < K; j++) {
			for (int k = 0; k < K; k++) {
				res += euclidean_gcd(i + 1, j + 1, k + 1);
			}
		}
	}
	printf("%d", res);
	return 0;
}