import java.util.*;
import java.io.*;
public class Main
{
 static Hashtable<String ,Integer>hash=new Hashtable<>();
  public static void main(String args[]) throws java.lang.Exception
  {
    MyScanner sc = new MyScanner();
  
     //  hash=new Hashtable<>();

    int n=Integer.parseInt(sc.nextLine());
    Hashtable<String,Integer>hash=new Hashtable<>();
    // long c=0;
    // int gcd[][]=new int[n+1][n+1];
    // for(int i=1;i<=n;i++)
    // {
    //   for(int j=i;j<=n;j++)
    //   {
    //     gcd[i][j]=gcd1(i,j);
    //   }
    // }
    long c=0;
    for(int k=1;k<=n;k++)
    {
      for(int i=1;i<=n;i++)

      {
        int kk=gcd1(i,k);
        for(int j=1;j<=n;j++)
        {
          c+=(long)gcd1(kk,j);
        }


        }
      }
    
    System.out.println(c);
       
     
     
   }
   static int gcd1(int a, int b)
   {
    return func(Math.min(a,b),Math.max(a,b));
   }
   static int func(int a, int b)
   {
    if(a==0){return b;}
    return func(b%a,a);
   }
     
  
  

  
  }

   class MyScanner {
      BufferedReader br;
      StringTokenizer st;
 
      public MyScanner() {
         br = new BufferedReader(new InputStreamReader(System.in));
      }
 
      String next() {
          while (st == null || !st.hasMoreElements()) {
              try {
                  st = new StringTokenizer(br.readLine());
              } catch (IOException e) {
                  e.printStackTrace();
              }
          }
          return st.nextToken();
      }
 
      int nextInt() {
          return Integer.parseInt(next());
      }
 
      long nextLong() {
          return Long.parseLong(next());
      }
 
      double nextDouble() {
          return Double.parseDouble(next());
      }
 
      String nextLine(){
          String str = "";
    try {
       str = br.readLine();
    } catch (IOException e) {
       e.printStackTrace();
    }
    return str;
      }
 
   } import java.util.*; util.* java import java.io.*; io.* java public class Main
{
 static Hashtable<String ,Integer>hash=new Hashtable<>();
  public static void main(String args[]) throws java.lang.Exception
  {
    MyScanner sc = new MyScanner();
  
     //  hash=new Hashtable<>();

    int n=Integer.parseInt(sc.nextLine());
    Hashtable<String,Integer>hash=new Hashtable<>();
    // long c=0;
    // int gcd[][]=new int[n+1][n+1];
    // for(int i=1;i<=n;i++)
    // {
    //   for(int j=i;j<=n;j++)
    //   {
    //     gcd[i][j]=gcd1(i,j);
    //   }
    // }
    long c=0;
    for(int k=1;k<=n;k++)
    {
      for(int i=1;i<=n;i++)

      {
        int kk=gcd1(i,k);
        for(int j=1;j<=n;j++)
        {
          c+=(long)gcd1(kk,j);
        }


        }
      }
    
    System.out.println(c);
       
     
     
   }
   static int gcd1(int a, int b)
   {
    return func(Math.min(a,b),Math.max(a,b));
   }
   static int func(int a, int b)
   {
    if(a==0){return b;}
    return func(b%a,a);
   }
     
  
  

  
  } Main static Hashtable<String ,Integer>hash=new Hashtable<>(); hash new Hashtable<>() public static void main(String args[]) throws java.lang.Exception
  {
    MyScanner sc = new MyScanner();
  
     //  hash=new Hashtable<>();

    int n=Integer.parseInt(sc.nextLine());
    Hashtable<String,Integer>hash=new Hashtable<>();
    // long c=0;
    // int gcd[][]=new int[n+1][n+1];
    // for(int i=1;i<=n;i++)
    // {
    //   for(int j=i;j<=n;j++)
    //   {
    //     gcd[i][j]=gcd1(i,j);
    //   }
    // }
    long c=0;
    for(int k=1;k<=n;k++)
    {
      for(int i=1;i<=n;i++)

      {
        int kk=gcd1(i,k);
        for(int j=1;j<=n;j++)
        {
          c+=(long)gcd1(kk,j);
        }


        }
      }
    
    System.out.println(c);
       
     
     
   } main {
    MyScanner sc = new MyScanner();
  
     //  hash=new Hashtable<>();

    int n=Integer.parseInt(sc.nextLine());
    Hashtable<String,Integer>hash=new Hashtable<>();
    // long c=0;
    // int gcd[][]=new int[n+1][n+1];
    // for(int i=1;i<=n;i++)
    // {
    //   for(int j=i;j<=n;j++)
    //   {
    //     gcd[i][j]=gcd1(i,j);
    //   }
    // }
    long c=0;
    for(int k=1;k<=n;k++)
    {
      for(int i=1;i<=n;i++)

      {
        int kk=gcd1(i,k);
        for(int j=1;j<=n;j++)
        {
          c+=(long)gcd1(kk,j);
        }


        }
      }
    
    System.out.println(c);
       
     
     
   } MyScanner sc = new MyScanner(); sc new MyScanner() int n=Integer.parseInt(sc.nextLine()); n Integer.parseInt(sc.nextLine()) Integer.parseInt Integer sc.nextLine() sc.nextLine sc Hashtable<String,Integer>hash=new Hashtable<>(); hash new Hashtable<>() long c=0; c 0 for(int k=1;k<=n;k++)
    {
      for(int i=1;i<=n;i++)

      {
        int kk=gcd1(i,k);
        for(int j=1;j<=n;j++)
        {
          c+=(long)gcd1(kk,j);
        }


        }
      } int k=1; int k=1; k 1 k<=n k n k++ k++ k {
      for(int i=1;i<=n;i++)

      {
        int kk=gcd1(i,k);
        for(int j=1;j<=n;j++)
        {
          c+=(long)gcd1(kk,j);
        }


        }
      } {
      for(int i=1;i<=n;i++)

      {
        int kk=gcd1(i,k);
        for(int j=1;j<=n;j++)
        {
          c+=(long)gcd1(kk,j);
        }


        }
      } for(int i=1;i<=n;i++)

      {
        int kk=gcd1(i,k);
        for(int j=1;j<=n;j++)
        {
          c+=(long)gcd1(kk,j);
        }


        } int i=1; int i=1; i 1 i<=n i n i++ i++ i {
        int kk=gcd1(i,k);
        for(int j=1;j<=n;j++)
        {
          c+=(long)gcd1(kk,j);
        }


        } {
        int kk=gcd1(i,k);
        for(int j=1;j<=n;j++)
        {
          c+=(long)gcd1(kk,j);
        }


        } int kk=gcd1(i,k); kk gcd1(i,k) gcd1 i k for(int j=1;j<=n;j++)
        {
          c+=(long)gcd1(kk,j);
        } int j=1; int j=1; j 1 j<=n j n j++ j++ j {
          c+=(long)gcd1(kk,j);
        } {
          c+=(long)gcd1(kk,j);
        } c+=(long)gcd1(kk,j) c (long)gcd1(kk,j) gcd1 kk j System.out.println(c) System.out.println System.out System System.out c String args[] args static int gcd1(int a, int b)
   {
    return func(Math.min(a,b),Math.max(a,b));
   } gcd1 {
    return func(Math.min(a,b),Math.max(a,b));
   } return func(Math.min(a,b),Math.max(a,b)); func(Math.min(a,b),Math.max(a,b)) func Math.min(a,b) Math.min Math a b Math.max(a,b) Math.max Math a b int a a int b b static int func(int a, int b)
   {
    if(a==0){return b;}
    return func(b%a,a);
   } func {
    if(a==0){return b;}
    return func(b%a,a);
   } if(a==0){return b;} a==0 a 0 {return b;} return b; b return func(b%a,a); func(b%a,a) func b%a b a a int a a int b b class MyScanner {
      BufferedReader br;
      StringTokenizer st;
 
      public MyScanner() {
         br = new BufferedReader(new InputStreamReader(System.in));
      }
 
      String next() {
          while (st == null || !st.hasMoreElements()) {
              try {
                  st = new StringTokenizer(br.readLine());
              } catch (IOException e) {
                  e.printStackTrace();
              }
          }
          return st.nextToken();
      }
 
      int nextInt() {
          return Integer.parseInt(next());
      }
 
      long nextLong() {
          return Long.parseLong(next());
      }
 
      double nextDouble() {
          return Double.parseDouble(next());
      }
 
      String nextLine(){
          String str = "";
    try {
       str = br.readLine();
    } catch (IOException e) {
       e.printStackTrace();
    }
    return str;
      }
 
   } MyScanner BufferedReader br; br StringTokenizer st; st public MyScanner() {
         br = new BufferedReader(new InputStreamReader(System.in));
      } MyScanner {
         br = new BufferedReader(new InputStreamReader(System.in));
      } br = new BufferedReader(new InputStreamReader(System.in)) br new BufferedReader(new InputStreamReader(System.in)) String next() {
          while (st == null || !st.hasMoreElements()) {
              try {
                  st = new StringTokenizer(br.readLine());
              } catch (IOException e) {
                  e.printStackTrace();
              }
          }
          return st.nextToken();
      } next {
          while (st == null || !st.hasMoreElements()) {
              try {
                  st = new StringTokenizer(br.readLine());
              } catch (IOException e) {
                  e.printStackTrace();
              }
          }
          return st.nextToken();
      } while (st == null || !st.hasMoreElements()) {
              try {
                  st = new StringTokenizer(br.readLine());
              } catch (IOException e) {
                  e.printStackTrace();
              }
          } st == null || !st.hasMoreElements() st == null st null !st.hasMoreElements() st.hasMoreElements() st.hasMoreElements st {
              try {
                  st = new StringTokenizer(br.readLine());
              } catch (IOException e) {
                  e.printStackTrace();
              }
          } try {
                  st = new StringTokenizer(br.readLine());
              } catch (IOException e) {
                  e.printStackTrace();
              } catch (IOException e) {
                  e.printStackTrace();
              } IOException e {
                  e.printStackTrace();
              } e.printStackTrace() e.printStackTrace e {
                  st = new StringTokenizer(br.readLine());
              } st = new StringTokenizer(br.readLine()) st new StringTokenizer(br.readLine()) return st.nextToken(); st.nextToken() st.nextToken st int nextInt() {
          return Integer.parseInt(next());
      } nextInt {
          return Integer.parseInt(next());
      } return Integer.parseInt(next()); Integer.parseInt(next()) Integer.parseInt Integer next() next long nextLong() {
          return Long.parseLong(next());
      } nextLong {
          return Long.parseLong(next());
      } return Long.parseLong(next()); Long.parseLong(next()) Long.parseLong Long next() next double nextDouble() {
          return Double.parseDouble(next());
      } nextDouble {
          return Double.parseDouble(next());
      } return Double.parseDouble(next()); Double.parseDouble(next()) Double.parseDouble Double next() next String nextLine(){
          String str = "";
    try {
       str = br.readLine();
    } catch (IOException e) {
       e.printStackTrace();
    }
    return str;
      } nextLine {
          String str = "";
    try {
       str = br.readLine();
    } catch (IOException e) {
       e.printStackTrace();
    }
    return str;
      } String str = ""; str "" try {
       str = br.readLine();
    } catch (IOException e) {
       e.printStackTrace();
    } catch (IOException e) {
       e.printStackTrace();
    } IOException e {
       e.printStackTrace();
    } e.printStackTrace() e.printStackTrace e {
       str = br.readLine();
    } str = br.readLine() str br.readLine() br.readLine br return str; str public class Main
{
 static Hashtable<String ,Integer>hash=new Hashtable<>();
  public static void main(String args[]) throws java.lang.Exception
  {
    MyScanner sc = new MyScanner();
  
     //  hash=new Hashtable<>();

    int n=Integer.parseInt(sc.nextLine());
    Hashtable<String,Integer>hash=new Hashtable<>();
    // long c=0;
    // int gcd[][]=new int[n+1][n+1];
    // for(int i=1;i<=n;i++)
    // {
    //   for(int j=i;j<=n;j++)
    //   {
    //     gcd[i][j]=gcd1(i,j);
    //   }
    // }
    long c=0;
    for(int k=1;k<=n;k++)
    {
      for(int i=1;i<=n;i++)

      {
        int kk=gcd1(i,k);
        for(int j=1;j<=n;j++)
        {
          c+=(long)gcd1(kk,j);
        }


        }
      }
    
    System.out.println(c);
       
     
     
   }
   static int gcd1(int a, int b)
   {
    return func(Math.min(a,b),Math.max(a,b));
   }
   static int func(int a, int b)
   {
    if(a==0){return b;}
    return func(b%a,a);
   }
     
  
  

  
  } public class Main
{
 static Hashtable<String ,Integer>hash=new Hashtable<>();
  public static void main(String args[]) throws java.lang.Exception
  {
    MyScanner sc = new MyScanner();
  
     //  hash=new Hashtable<>();

    int n=Integer.parseInt(sc.nextLine());
    Hashtable<String,Integer>hash=new Hashtable<>();
    // long c=0;
    // int gcd[][]=new int[n+1][n+1];
    // for(int i=1;i<=n;i++)
    // {
    //   for(int j=i;j<=n;j++)
    //   {
    //     gcd[i][j]=gcd1(i,j);
    //   }
    // }
    long c=0;
    for(int k=1;k<=n;k++)
    {
      for(int i=1;i<=n;i++)

      {
        int kk=gcd1(i,k);
        for(int j=1;j<=n;j++)
        {
          c+=(long)gcd1(kk,j);
        }


        }
      }
    
    System.out.println(c);
       
     
     
   }
   static int gcd1(int a, int b)
   {
    return func(Math.min(a,b),Math.max(a,b));
   }
   static int func(int a, int b)
   {
    if(a==0){return b;}
    return func(b%a,a);
   }
     
  
  

  
  } Main
import java.util.*;
import java.io.*;
public class Main
{
 static Hashtable<String ,Integer>hash=new Hashtable<>();
  public static void main(String args[]) throws java.lang.Exception
  {
    MyScanner sc = new MyScanner();
  
     //  hash=new Hashtable<>();

    int n=Integer.parseInt(sc.nextLine());
    Hashtable<String,Integer>hash=new Hashtable<>();
    // long c=0;
    // int gcd[][]=new int[n+1][n+1];
    // for(int i=1;i<=n;i++)
    // {
    //   for(int j=i;j<=n;j++)
    //   {
    //     gcd[i][j]=gcd1(i,j);
    //   }
    // }
    long c=0;
    for(int k=1;k<=n;k++)
    {
      for(int i=1;i<=n;i++)

      {
        int kk=gcd1(i,k);
        for(int j=1;j<=n;j++)
        {
          c+=(long)gcd1(kk,j);
        }


        }
      }
    
    System.out.println(c);
       
     
     
   }
   static int gcd1(int a, int b)
   {
    return func(Math.min(a,b),Math.max(a,b));
   }
   static int func(int a, int b)
   {
    if(a==0){return b;}
    return func(b%a,a);
   }
     
  
  

  
  }

   class MyScanner {
      BufferedReader br;
      StringTokenizer st;
 
      public MyScanner() {
         br = new BufferedReader(new InputStreamReader(System.in));
      }
 
      String next() {
          while (st == null || !st.hasMoreElements()) {
              try {
                  st = new StringTokenizer(br.readLine());
              } catch (IOException e) {
                  e.printStackTrace();
              }
          }
          return st.nextToken();
      }
 
      int nextInt() {
          return Integer.parseInt(next());
      }
 
      long nextLong() {
          return Long.parseLong(next());
      }
 
      double nextDouble() {
          return Double.parseDouble(next());
      }
 
      String nextLine(){
          String str = "";
    try {
       str = br.readLine();
    } catch (IOException e) {
       e.printStackTrace();
    }
    return str;
      }
 
   }