

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.Scanner;
import java.util.TreeMap;

public class Main {

	static Scanner scanner;

	public static void main(String[] args) {
	    scanner = new Scanner(System.in);

	    int K=gi();
	    int s=0;
        for(int i=1; i<=K; i++) {
        	for(int j=1; j<=K; j++) {
        		int u1=uclid(i,j);
        		for(int k=1; k<=K; k++) {
                	int u=uclid(u1,k);
                	s+=u;
                }
            }
        }
        

        System.out.print(s);

//        if (b>=1 && b<=12) {
//        	if(a>=1 && a<=12) {
//        	    System.out.println("AMBIGUOUS");
//        	} else {
//        		System.out.println("MMYY");
//        	}
//        }else {
//        	if(a>=1 && a<=12) {
//        	    System.out.println("YYMM");
//        	} else {
//        		System.out.println("NA");
//        	}
//        }
	}
	
	// ユークリッドの互除法
    public static int uclid(int m, int n) {
    	if (m<n) {
			m^=n;
			n^=m;
			m^=n;
		}

		while(true) {
			int t=m%n;
			if (t==0) {
				return n;
			} else {
				m=n;
				n=t;
			}
		}
    }

	// 文字列として入力を取得
	public static String gs() {
		return scanner.next();
	}

	// intとして入力を取得
	public static int gi() {
		return Integer.parseInt(scanner.next());
	}

	// longとして入力を取得
	public static long gl() {
		return Long.parseLong(scanner.next());
	}

	// doubleとして入力を取得
	public static double gd() {
		return Double.parseDouble(scanner.next());
	}
} import java.util.ArrayList; ArrayList java.util import java.util.Arrays; Arrays java.util import java.util.Collections; Collections java.util import java.util.List; List java.util import java.util.Map; Map java.util import java.util.Scanner; Scanner java.util import java.util.TreeMap; TreeMap java.util public class Main {

	static Scanner scanner;

	public static void main(String[] args) {
	    scanner = new Scanner(System.in);

	    int K=gi();
	    int s=0;
        for(int i=1; i<=K; i++) {
        	for(int j=1; j<=K; j++) {
        		int u1=uclid(i,j);
        		for(int k=1; k<=K; k++) {
                	int u=uclid(u1,k);
                	s+=u;
                }
            }
        }
        

        System.out.print(s);

//        if (b>=1 && b<=12) {
//        	if(a>=1 && a<=12) {
//        	    System.out.println("AMBIGUOUS");
//        	} else {
//        		System.out.println("MMYY");
//        	}
//        }else {
//        	if(a>=1 && a<=12) {
//        	    System.out.println("YYMM");
//        	} else {
//        		System.out.println("NA");
//        	}
//        }
	}
	
	// ユークリッドの互除法
    public static int uclid(int m, int n) {
    	if (m<n) {
			m^=n;
			n^=m;
			m^=n;
		}

		while(true) {
			int t=m%n;
			if (t==0) {
				return n;
			} else {
				m=n;
				n=t;
			}
		}
    }

	// 文字列として入力を取得
	public static String gs() {
		return scanner.next();
	}

	// intとして入力を取得
	public static int gi() {
		return Integer.parseInt(scanner.next());
	}

	// longとして入力を取得
	public static long gl() {
		return Long.parseLong(scanner.next());
	}

	// doubleとして入力を取得
	public static double gd() {
		return Double.parseDouble(scanner.next());
	}
} Main static Scanner scanner; scanner public static void main(String[] args) {
	    scanner = new Scanner(System.in);

	    int K=gi();
	    int s=0;
        for(int i=1; i<=K; i++) {
        	for(int j=1; j<=K; j++) {
        		int u1=uclid(i,j);
        		for(int k=1; k<=K; k++) {
                	int u=uclid(u1,k);
                	s+=u;
                }
            }
        }
        

        System.out.print(s);

//        if (b>=1 && b<=12) {
//        	if(a>=1 && a<=12) {
//        	    System.out.println("AMBIGUOUS");
//        	} else {
//        		System.out.println("MMYY");
//        	}
//        }else {
//        	if(a>=1 && a<=12) {
//        	    System.out.println("YYMM");
//        	} else {
//        		System.out.println("NA");
//        	}
//        }
	} main {
	    scanner = new Scanner(System.in);

	    int K=gi();
	    int s=0;
        for(int i=1; i<=K; i++) {
        	for(int j=1; j<=K; j++) {
        		int u1=uclid(i,j);
        		for(int k=1; k<=K; k++) {
                	int u=uclid(u1,k);
                	s+=u;
                }
            }
        }
        

        System.out.print(s);

//        if (b>=1 && b<=12) {
//        	if(a>=1 && a<=12) {
//        	    System.out.println("AMBIGUOUS");
//        	} else {
//        		System.out.println("MMYY");
//        	}
//        }else {
//        	if(a>=1 && a<=12) {
//        	    System.out.println("YYMM");
//        	} else {
//        		System.out.println("NA");
//        	}
//        }
	} scanner = new Scanner(System.in) scanner new Scanner(System.in) int K=gi(); K gi() gi int s=0; s 0 for(int i=1; i<=K; i++) {
        	for(int j=1; j<=K; j++) {
        		int u1=uclid(i,j);
        		for(int k=1; k<=K; k++) {
                	int u=uclid(u1,k);
                	s+=u;
                }
            }
        } int i=1; int i=1; i 1 i<=K i K i++ i++ i {
        	for(int j=1; j<=K; j++) {
        		int u1=uclid(i,j);
        		for(int k=1; k<=K; k++) {
                	int u=uclid(u1,k);
                	s+=u;
                }
            }
        } {
        	for(int j=1; j<=K; j++) {
        		int u1=uclid(i,j);
        		for(int k=1; k<=K; k++) {
                	int u=uclid(u1,k);
                	s+=u;
                }
            }
        } for(int j=1; j<=K; j++) {
        		int u1=uclid(i,j);
        		for(int k=1; k<=K; k++) {
                	int u=uclid(u1,k);
                	s+=u;
                }
            } int j=1; int j=1; j 1 j<=K j K j++ j++ j {
        		int u1=uclid(i,j);
        		for(int k=1; k<=K; k++) {
                	int u=uclid(u1,k);
                	s+=u;
                }
            } {
        		int u1=uclid(i,j);
        		for(int k=1; k<=K; k++) {
                	int u=uclid(u1,k);
                	s+=u;
                }
            } int u1=uclid(i,j); u1 uclid(i,j) uclid i j for(int k=1; k<=K; k++) {
                	int u=uclid(u1,k);
                	s+=u;
                } int k=1; int k=1; k 1 k<=K k K k++ k++ k {
                	int u=uclid(u1,k);
                	s+=u;
                } {
                	int u=uclid(u1,k);
                	s+=u;
                } int u=uclid(u1,k); u uclid(u1,k) uclid u1 k s+=u s u System.out.print(s) System.out.print System.out System System.out s String[] args args // ユークリッドの互除法
    public static int uclid(int m, int n) {
    	if (m<n) {
			m^=n;
			n^=m;
			m^=n;
		}

		while(true) {
			int t=m%n;
			if (t==0) {
				return n;
			} else {
				m=n;
				n=t;
			}
		}
    } uclid {
    	if (m<n) {
			m^=n;
			n^=m;
			m^=n;
		}

		while(true) {
			int t=m%n;
			if (t==0) {
				return n;
			} else {
				m=n;
				n=t;
			}
		}
    } if (m<n) {
			m^=n;
			n^=m;
			m^=n;
		} m<n m n {
			m^=n;
			n^=m;
			m^=n;
		} m^=n m n n^=m n m m^=n m n while(true) {
			int t=m%n;
			if (t==0) {
				return n;
			} else {
				m=n;
				n=t;
			}
		} true {
			int t=m%n;
			if (t==0) {
				return n;
			} else {
				m=n;
				n=t;
			}
		} int t=m%n; t m%n m n if (t==0) {
				return n;
			} else {
				m=n;
				n=t;
			} t==0 t 0 {
				return n;
			} return n; n {
				m=n;
				n=t;
			} m=n m n n=t n t int m m int n n // 文字列として入力を取得
	public static String gs() {
		return scanner.next();
	} gs {
		return scanner.next();
	} return scanner.next(); scanner.next() scanner.next scanner // intとして入力を取得
	public static int gi() {
		return Integer.parseInt(scanner.next());
	} gi {
		return Integer.parseInt(scanner.next());
	} return Integer.parseInt(scanner.next()); Integer.parseInt(scanner.next()) Integer.parseInt Integer scanner.next() scanner.next scanner // longとして入力を取得
	public static long gl() {
		return Long.parseLong(scanner.next());
	} gl {
		return Long.parseLong(scanner.next());
	} return Long.parseLong(scanner.next()); Long.parseLong(scanner.next()) Long.parseLong Long scanner.next() scanner.next scanner // doubleとして入力を取得
	public static double gd() {
		return Double.parseDouble(scanner.next());
	} gd {
		return Double.parseDouble(scanner.next());
	} return Double.parseDouble(scanner.next()); Double.parseDouble(scanner.next()) Double.parseDouble Double scanner.next() scanner.next scanner public class Main {

	static Scanner scanner;

	public static void main(String[] args) {
	    scanner = new Scanner(System.in);

	    int K=gi();
	    int s=0;
        for(int i=1; i<=K; i++) {
        	for(int j=1; j<=K; j++) {
        		int u1=uclid(i,j);
        		for(int k=1; k<=K; k++) {
                	int u=uclid(u1,k);
                	s+=u;
                }
            }
        }
        

        System.out.print(s);

//        if (b>=1 && b<=12) {
//        	if(a>=1 && a<=12) {
//        	    System.out.println("AMBIGUOUS");
//        	} else {
//        		System.out.println("MMYY");
//        	}
//        }else {
//        	if(a>=1 && a<=12) {
//        	    System.out.println("YYMM");
//        	} else {
//        		System.out.println("NA");
//        	}
//        }
	}
	
	// ユークリッドの互除法
    public static int uclid(int m, int n) {
    	if (m<n) {
			m^=n;
			n^=m;
			m^=n;
		}

		while(true) {
			int t=m%n;
			if (t==0) {
				return n;
			} else {
				m=n;
				n=t;
			}
		}
    }

	// 文字列として入力を取得
	public static String gs() {
		return scanner.next();
	}

	// intとして入力を取得
	public static int gi() {
		return Integer.parseInt(scanner.next());
	}

	// longとして入力を取得
	public static long gl() {
		return Long.parseLong(scanner.next());
	}

	// doubleとして入力を取得
	public static double gd() {
		return Double.parseDouble(scanner.next());
	}
} public class Main {

	static Scanner scanner;

	public static void main(String[] args) {
	    scanner = new Scanner(System.in);

	    int K=gi();
	    int s=0;
        for(int i=1; i<=K; i++) {
        	for(int j=1; j<=K; j++) {
        		int u1=uclid(i,j);
        		for(int k=1; k<=K; k++) {
                	int u=uclid(u1,k);
                	s+=u;
                }
            }
        }
        

        System.out.print(s);

//        if (b>=1 && b<=12) {
//        	if(a>=1 && a<=12) {
//        	    System.out.println("AMBIGUOUS");
//        	} else {
//        		System.out.println("MMYY");
//        	}
//        }else {
//        	if(a>=1 && a<=12) {
//        	    System.out.println("YYMM");
//        	} else {
//        		System.out.println("NA");
//        	}
//        }
	}
	
	// ユークリッドの互除法
    public static int uclid(int m, int n) {
    	if (m<n) {
			m^=n;
			n^=m;
			m^=n;
		}

		while(true) {
			int t=m%n;
			if (t==0) {
				return n;
			} else {
				m=n;
				n=t;
			}
		}
    }

	// 文字列として入力を取得
	public static String gs() {
		return scanner.next();
	}

	// intとして入力を取得
	public static int gi() {
		return Integer.parseInt(scanner.next());
	}

	// longとして入力を取得
	public static long gl() {
		return Long.parseLong(scanner.next());
	}

	// doubleとして入力を取得
	public static double gd() {
		return Double.parseDouble(scanner.next());
	}
} Main


import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.Scanner;
import java.util.TreeMap;

public class Main {

	static Scanner scanner;

	public static void main(String[] args) {
	    scanner = new Scanner(System.in);

	    int K=gi();
	    int s=0;
        for(int i=1; i<=K; i++) {
        	for(int j=1; j<=K; j++) {
        		int u1=uclid(i,j);
        		for(int k=1; k<=K; k++) {
                	int u=uclid(u1,k);
                	s+=u;
                }
            }
        }
        

        System.out.print(s);

//        if (b>=1 && b<=12) {
//        	if(a>=1 && a<=12) {
//        	    System.out.println("AMBIGUOUS");
//        	} else {
//        		System.out.println("MMYY");
//        	}
//        }else {
//        	if(a>=1 && a<=12) {
//        	    System.out.println("YYMM");
//        	} else {
//        		System.out.println("NA");
//        	}
//        }
	}
	
	// ユークリッドの互除法
    public static int uclid(int m, int n) {
    	if (m<n) {
			m^=n;
			n^=m;
			m^=n;
		}

		while(true) {
			int t=m%n;
			if (t==0) {
				return n;
			} else {
				m=n;
				n=t;
			}
		}
    }

	// 文字列として入力を取得
	public static String gs() {
		return scanner.next();
	}

	// intとして入力を取得
	public static int gi() {
		return Integer.parseInt(scanner.next());
	}

	// longとして入力を取得
	public static long gl() {
		return Long.parseLong(scanner.next());
	}

	// doubleとして入力を取得
	public static double gd() {
		return Double.parseDouble(scanner.next());
	}
}