import java.util.Scanner;

public class Main {
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        int k = sc.nextInt();
        long ans = 0;
        // 文字列切り出し
        for(int i = 1; i <= k; i++) {
            for(int j = 1; j <= k; j++) {
                for(int h = 1; h <= k; h++) {
                    ans += gcd(i, gcd(j, h));
                }
            }
        }
        
        System.out.println(ans);
    }

    // 最大公約数
    static int gcd(int a, int b) {
        return b>0 ? gcd(b, a%b) : a;
    }
} import java.util.Scanner; Scanner java.util public class Main {
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        int k = sc.nextInt();
        long ans = 0;
        // 文字列切り出し
        for(int i = 1; i <= k; i++) {
            for(int j = 1; j <= k; j++) {
                for(int h = 1; h <= k; h++) {
                    ans += gcd(i, gcd(j, h));
                }
            }
        }
        
        System.out.println(ans);
    }

    // 最大公約数
    static int gcd(int a, int b) {
        return b>0 ? gcd(b, a%b) : a;
    }
} Main public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        int k = sc.nextInt();
        long ans = 0;
        // 文字列切り出し
        for(int i = 1; i <= k; i++) {
            for(int j = 1; j <= k; j++) {
                for(int h = 1; h <= k; h++) {
                    ans += gcd(i, gcd(j, h));
                }
            }
        }
        
        System.out.println(ans);
    } main {
        Scanner sc = new Scanner(System.in);
        int k = sc.nextInt();
        long ans = 0;
        // 文字列切り出し
        for(int i = 1; i <= k; i++) {
            for(int j = 1; j <= k; j++) {
                for(int h = 1; h <= k; h++) {
                    ans += gcd(i, gcd(j, h));
                }
            }
        }
        
        System.out.println(ans);
    } Scanner sc = new Scanner(System.in); sc new Scanner(System.in) int k = sc.nextInt(); k sc.nextInt() sc.nextInt sc long ans = 0; ans 0 for(int i = 1; i <= k; i++) {
            for(int j = 1; j <= k; j++) {
                for(int h = 1; h <= k; h++) {
                    ans += gcd(i, gcd(j, h));
                }
            }
        } int i = 1; int i = 1; i 1 i <= k i k i++ i++ i {
            for(int j = 1; j <= k; j++) {
                for(int h = 1; h <= k; h++) {
                    ans += gcd(i, gcd(j, h));
                }
            }
        } {
            for(int j = 1; j <= k; j++) {
                for(int h = 1; h <= k; h++) {
                    ans += gcd(i, gcd(j, h));
                }
            }
        } for(int j = 1; j <= k; j++) {
                for(int h = 1; h <= k; h++) {
                    ans += gcd(i, gcd(j, h));
                }
            } int j = 1; int j = 1; j 1 j <= k j k j++ j++ j {
                for(int h = 1; h <= k; h++) {
                    ans += gcd(i, gcd(j, h));
                }
            } {
                for(int h = 1; h <= k; h++) {
                    ans += gcd(i, gcd(j, h));
                }
            } for(int h = 1; h <= k; h++) {
                    ans += gcd(i, gcd(j, h));
                } int h = 1; int h = 1; h 1 h <= k h k h++ h++ h {
                    ans += gcd(i, gcd(j, h));
                } {
                    ans += gcd(i, gcd(j, h));
                } ans += gcd(i, gcd(j, h)) ans gcd(i, gcd(j, h)) gcd i gcd(j, h) gcd j h System.out.println(ans) System.out.println System.out System System.out ans String[] args args // 最大公約数
    static int gcd(int a, int b) {
        return b>0 ? gcd(b, a%b) : a;
    } gcd {
        return b>0 ? gcd(b, a%b) : a;
    } return b>0 ? gcd(b, a%b) : a; b>0 ? gcd(b, a%b) : a b>0 b 0 gcd(b, a%b) gcd b a%b a b a int a a int b b public class Main {
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        int k = sc.nextInt();
        long ans = 0;
        // 文字列切り出し
        for(int i = 1; i <= k; i++) {
            for(int j = 1; j <= k; j++) {
                for(int h = 1; h <= k; h++) {
                    ans += gcd(i, gcd(j, h));
                }
            }
        }
        
        System.out.println(ans);
    }

    // 最大公約数
    static int gcd(int a, int b) {
        return b>0 ? gcd(b, a%b) : a;
    }
} public class Main {
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        int k = sc.nextInt();
        long ans = 0;
        // 文字列切り出し
        for(int i = 1; i <= k; i++) {
            for(int j = 1; j <= k; j++) {
                for(int h = 1; h <= k; h++) {
                    ans += gcd(i, gcd(j, h));
                }
            }
        }
        
        System.out.println(ans);
    }

    // 最大公約数
    static int gcd(int a, int b) {
        return b>0 ? gcd(b, a%b) : a;
    }
} Main
import java.util.Scanner;

public class Main {
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        int k = sc.nextInt();
        long ans = 0;
        // 文字列切り出し
        for(int i = 1; i <= k; i++) {
            for(int j = 1; j <= k; j++) {
                for(int h = 1; h <= k; h++) {
                    ans += gcd(i, gcd(j, h));
                }
            }
        }
        
        System.out.println(ans);
    }

    // 最大公約数
    static int gcd(int a, int b) {
        return b>0 ? gcd(b, a%b) : a;
    }
}
