import java.io.*;
import java.util.*;

class Main {
	public static void main(String[] args) throws IOException {
		Scan sc = new Scan();
		int K = sc.scanInt();
		SolABC162_c sol = new SolABC162_c(K);
		sol.calcMu();
		sol.calcGCDTuple(3);
	}
}

class SolABC162_c {
	int K;
	int[] mu, prime;

	public SolABC162_c(int K) {
		this.K = K;
		mu = new int[K + 1];
		prime = new int[K + 1];
		for (int i = 1; i <= K; ++i) {
			mu[i] = 1;
			prime[i] = 1;
		}
	}

	void calcMu() {
		for (int i = 2; i <= K; ++i) {
			if (prime[i] == 1) {
				for (int j = i; j <= K; j += i) {
					if (j > i)
						prime[j] = 0;
					if (j % (i * i) == 0)
						mu[j] = 0;
					mu[j] = -mu[j];
				}
			}
		}
	}

	void calcGCDTuple(int cnt) {
		long res = 0;
		for (int d = 1; d <= K; ++d) {
			long tmp = 0;
			for (int s = 1; s <= K / d; ++s) {
				tmp += (mu[s] * Math.pow(K / (d * s), cnt));
			}
			res += tmp * d;
		}
		System.out.println(res);
	}
}

class Scan {
    private byte[] buf=new byte[1024];
    private int index;
    private InputStream in;
    private int total;
	
    public Scan()
    {
        in=System.in;
    }
    public int scan()throws IOException
    {
        if(total<0)
        throw new InputMismatchException();
        if(index>=total)
        {
            index=0;
            total=in.read(buf);
            if(total<=0)
            return -1;
        }
        return buf[index++];
    }
    public int scanInt()throws IOException
    {
        int integer=0;
        int n=scan();
        while(isWhiteSpace(n))
        n=scan();
        int neg=1;
        if(n=='-')
        {
            neg=-1;
            n=scan();
        }
        while(!isWhiteSpace(n))
        {
            if(n>='0'&&n<='9')
            {
                integer*=10;
                integer+=n-'0';
                n=scan();
				
            }
            else throw new InputMismatchException();
        }
        return neg*integer;
    }
	public long scanLong()throws IOException
    {
        long integer=0;
        int n=scan();
        while(isWhiteSpace(n))
        n=scan();
        int neg=1;
        if(n=='-')
        {
            neg=-1;
            n=scan();
        }
        while(!isWhiteSpace(n))
        {
            if(n>='0'&&n<='9')
            {
                integer*=10;
                integer+=n-'0';
                n=scan();
            }
            else throw new InputMismatchException();
        }
        return neg*integer;
    }
    public double scanDouble()throws IOException
    {
        double doub=0;
        int n=scan();
        while(isWhiteSpace(n))
        n=scan();
        int neg=1;
        if(n=='-')
        {
            neg=-1;
            n=scan();
        }
        while(!isWhiteSpace(n)&&n!='.')
        {
            if(n>='0'&&n<='9')
            {
                doub*=10;
                doub+=n-'0';
                n=scan();
            }
            else throw new InputMismatchException();
        }
        if(n=='.')
        {
            n=scan();
            double temp=1;
            while(!isWhiteSpace(n))
            {
                if(n>='0'&&n<='9')
                {
                    temp/=10;
                    doub+=(n-'0')*temp;
                    n=scan();
                }
                else throw new InputMismatchException();
            }
        }
        return doub*neg;
    }
    public String scanString()throws IOException
    {
        StringBuilder sb=new StringBuilder();
        int n=scan();
        while(isWhiteSpace(n))
        n=scan();
        while(!isWhiteSpace(n))
        {
            sb.append((char)n);
            n=scan();
        }
        return sb.toString();
    }
    private boolean isWhiteSpace(int n)
    {
        if(n==' '||n=='\n'||n=='\r'||n=='\t'||n==-1)
        return true;
        return false;
    }
}
 import java.io.*; io.* java import java.util.*; util.* java class Main {
	public static void main(String[] args) throws IOException {
		Scan sc = new Scan();
		int K = sc.scanInt();
		SolABC162_c sol = new SolABC162_c(K);
		sol.calcMu();
		sol.calcGCDTuple(3);
	}
} Main public static void main(String[] args) throws IOException {
		Scan sc = new Scan();
		int K = sc.scanInt();
		SolABC162_c sol = new SolABC162_c(K);
		sol.calcMu();
		sol.calcGCDTuple(3);
	} main {
		Scan sc = new Scan();
		int K = sc.scanInt();
		SolABC162_c sol = new SolABC162_c(K);
		sol.calcMu();
		sol.calcGCDTuple(3);
	} Scan sc = new Scan(); sc new Scan() int K = sc.scanInt(); K sc.scanInt() sc.scanInt sc SolABC162_c sol = new SolABC162_c(K); sol new SolABC162_c(K) sol.calcMu() sol.calcMu sol sol.calcGCDTuple(3) sol.calcGCDTuple sol 3 String[] args args class SolABC162_c {
	int K;
	int[] mu, prime;

	public SolABC162_c(int K) {
		this.K = K;
		mu = new int[K + 1];
		prime = new int[K + 1];
		for (int i = 1; i <= K; ++i) {
			mu[i] = 1;
			prime[i] = 1;
		}
	}

	void calcMu() {
		for (int i = 2; i <= K; ++i) {
			if (prime[i] == 1) {
				for (int j = i; j <= K; j += i) {
					if (j > i)
						prime[j] = 0;
					if (j % (i * i) == 0)
						mu[j] = 0;
					mu[j] = -mu[j];
				}
			}
		}
	}

	void calcGCDTuple(int cnt) {
		long res = 0;
		for (int d = 1; d <= K; ++d) {
			long tmp = 0;
			for (int s = 1; s <= K / d; ++s) {
				tmp += (mu[s] * Math.pow(K / (d * s), cnt));
			}
			res += tmp * d;
		}
		System.out.println(res);
	}
} SolABC162_c int K; K int[] mu mu prime; prime public SolABC162_c(int K) {
		this.K = K;
		mu = new int[K + 1];
		prime = new int[K + 1];
		for (int i = 1; i <= K; ++i) {
			mu[i] = 1;
			prime[i] = 1;
		}
	} SolABC162_c {
		this.K = K;
		mu = new int[K + 1];
		prime = new int[K + 1];
		for (int i = 1; i <= K; ++i) {
			mu[i] = 1;
			prime[i] = 1;
		}
	} this.K = K this.K this this.K K mu = new int[K + 1] mu new int[K + 1] K + 1 K 1 prime = new int[K + 1] prime new int[K + 1] K + 1 K 1 for (int i = 1; i <= K; ++i) {
			mu[i] = 1;
			prime[i] = 1;
		} int i = 1; int i = 1; i 1 i <= K i K ++i ++i i {
			mu[i] = 1;
			prime[i] = 1;
		} {
			mu[i] = 1;
			prime[i] = 1;
		} mu[i] = 1 mu[i] mu i 1 prime[i] = 1 prime[i] prime i 1 int K K void calcMu() {
		for (int i = 2; i <= K; ++i) {
			if (prime[i] == 1) {
				for (int j = i; j <= K; j += i) {
					if (j > i)
						prime[j] = 0;
					if (j % (i * i) == 0)
						mu[j] = 0;
					mu[j] = -mu[j];
				}
			}
		}
	} calcMu {
		for (int i = 2; i <= K; ++i) {
			if (prime[i] == 1) {
				for (int j = i; j <= K; j += i) {
					if (j > i)
						prime[j] = 0;
					if (j % (i * i) == 0)
						mu[j] = 0;
					mu[j] = -mu[j];
				}
			}
		}
	} for (int i = 2; i <= K; ++i) {
			if (prime[i] == 1) {
				for (int j = i; j <= K; j += i) {
					if (j > i)
						prime[j] = 0;
					if (j % (i * i) == 0)
						mu[j] = 0;
					mu[j] = -mu[j];
				}
			}
		} int i = 2; int i = 2; i 2 i <= K i K ++i ++i i {
			if (prime[i] == 1) {
				for (int j = i; j <= K; j += i) {
					if (j > i)
						prime[j] = 0;
					if (j % (i * i) == 0)
						mu[j] = 0;
					mu[j] = -mu[j];
				}
			}
		} {
			if (prime[i] == 1) {
				for (int j = i; j <= K; j += i) {
					if (j > i)
						prime[j] = 0;
					if (j % (i * i) == 0)
						mu[j] = 0;
					mu[j] = -mu[j];
				}
			}
		} if (prime[i] == 1) {
				for (int j = i; j <= K; j += i) {
					if (j > i)
						prime[j] = 0;
					if (j % (i * i) == 0)
						mu[j] = 0;
					mu[j] = -mu[j];
				}
			} prime[i] == 1 prime[i] prime i 1 {
				for (int j = i; j <= K; j += i) {
					if (j > i)
						prime[j] = 0;
					if (j % (i * i) == 0)
						mu[j] = 0;
					mu[j] = -mu[j];
				}
			} for (int j = i; j <= K; j += i) {
					if (j > i)
						prime[j] = 0;
					if (j % (i * i) == 0)
						mu[j] = 0;
					mu[j] = -mu[j];
				} int j = i; int j = i; j i j <= K j K j += i j += i j i {
					if (j > i)
						prime[j] = 0;
					if (j % (i * i) == 0)
						mu[j] = 0;
					mu[j] = -mu[j];
				} {
					if (j > i)
						prime[j] = 0;
					if (j % (i * i) == 0)
						mu[j] = 0;
					mu[j] = -mu[j];
				} if (j > i)
						prime[j] = 0; j > i j i prime[j] = 0 prime[j] prime j 0 if (j % (i * i) == 0)
						mu[j] = 0; j % (i * i) == 0 j % (i * i) j (i * i) i i 0 mu[j] = 0 mu[j] mu j 0 mu[j] = -mu[j] mu[j] mu j -mu[j] mu[j] mu j void calcGCDTuple(int cnt) {
		long res = 0;
		for (int d = 1; d <= K; ++d) {
			long tmp = 0;
			for (int s = 1; s <= K / d; ++s) {
				tmp += (mu[s] * Math.pow(K / (d * s), cnt));
			}
			res += tmp * d;
		}
		System.out.println(res);
	} calcGCDTuple {
		long res = 0;
		for (int d = 1; d <= K; ++d) {
			long tmp = 0;
			for (int s = 1; s <= K / d; ++s) {
				tmp += (mu[s] * Math.pow(K / (d * s), cnt));
			}
			res += tmp * d;
		}
		System.out.println(res);
	} long res = 0; res 0 for (int d = 1; d <= K; ++d) {
			long tmp = 0;
			for (int s = 1; s <= K / d; ++s) {
				tmp += (mu[s] * Math.pow(K / (d * s), cnt));
			}
			res += tmp * d;
		} int d = 1; int d = 1; d 1 d <= K d K ++d ++d d {
			long tmp = 0;
			for (int s = 1; s <= K / d; ++s) {
				tmp += (mu[s] * Math.pow(K / (d * s), cnt));
			}
			res += tmp * d;
		} {
			long tmp = 0;
			for (int s = 1; s <= K / d; ++s) {
				tmp += (mu[s] * Math.pow(K / (d * s), cnt));
			}
			res += tmp * d;
		} long tmp = 0; tmp 0 for (int s = 1; s <= K / d; ++s) {
				tmp += (mu[s] * Math.pow(K / (d * s), cnt));
			} int s = 1; int s = 1; s 1 s <= K / d s K / d K d ++s ++s s {
				tmp += (mu[s] * Math.pow(K / (d * s), cnt));
			} {
				tmp += (mu[s] * Math.pow(K / (d * s), cnt));
			} tmp += (mu[s] * Math.pow(K / (d * s), cnt)) tmp (mu[s] * Math.pow(K / (d * s), cnt)) mu[s] mu s Math.pow(K / (d * s), cnt) Math.pow Math K / (d * s) K (d * s) d s cnt res += tmp * d res tmp * d tmp d System.out.println(res) System.out.println System.out System System.out res int cnt cnt class Scan {
    private byte[] buf=new byte[1024];
    private int index;
    private InputStream in;
    private int total;
	
    public Scan()
    {
        in=System.in;
    }
    public int scan()throws IOException
    {
        if(total<0)
        throw new InputMismatchException();
        if(index>=total)
        {
            index=0;
            total=in.read(buf);
            if(total<=0)
            return -1;
        }
        return buf[index++];
    }
    public int scanInt()throws IOException
    {
        int integer=0;
        int n=scan();
        while(isWhiteSpace(n))
        n=scan();
        int neg=1;
        if(n=='-')
        {
            neg=-1;
            n=scan();
        }
        while(!isWhiteSpace(n))
        {
            if(n>='0'&&n<='9')
            {
                integer*=10;
                integer+=n-'0';
                n=scan();
				
            }
            else throw new InputMismatchException();
        }
        return neg*integer;
    }
	public long scanLong()throws IOException
    {
        long integer=0;
        int n=scan();
        while(isWhiteSpace(n))
        n=scan();
        int neg=1;
        if(n=='-')
        {
            neg=-1;
            n=scan();
        }
        while(!isWhiteSpace(n))
        {
            if(n>='0'&&n<='9')
            {
                integer*=10;
                integer+=n-'0';
                n=scan();
            }
            else throw new InputMismatchException();
        }
        return neg*integer;
    }
    public double scanDouble()throws IOException
    {
        double doub=0;
        int n=scan();
        while(isWhiteSpace(n))
        n=scan();
        int neg=1;
        if(n=='-')
        {
            neg=-1;
            n=scan();
        }
        while(!isWhiteSpace(n)&&n!='.')
        {
            if(n>='0'&&n<='9')
            {
                doub*=10;
                doub+=n-'0';
                n=scan();
            }
            else throw new InputMismatchException();
        }
        if(n=='.')
        {
            n=scan();
            double temp=1;
            while(!isWhiteSpace(n))
            {
                if(n>='0'&&n<='9')
                {
                    temp/=10;
                    doub+=(n-'0')*temp;
                    n=scan();
                }
                else throw new InputMismatchException();
            }
        }
        return doub*neg;
    }
    public String scanString()throws IOException
    {
        StringBuilder sb=new StringBuilder();
        int n=scan();
        while(isWhiteSpace(n))
        n=scan();
        while(!isWhiteSpace(n))
        {
            sb.append((char)n);
            n=scan();
        }
        return sb.toString();
    }
    private boolean isWhiteSpace(int n)
    {
        if(n==' '||n=='\n'||n=='\r'||n=='\t'||n==-1)
        return true;
        return false;
    }
} Scan private byte[] buf=new byte[1024]; buf new byte[1024] 1024 private int index; index private InputStream in; in private int total; total public Scan()
    {
        in=System.in;
    } Scan {
        in=System.in;
    } in=System.in in System.in System System.in public int scan()throws IOException
    {
        if(total<0)
        throw new InputMismatchException();
        if(index>=total)
        {
            index=0;
            total=in.read(buf);
            if(total<=0)
            return -1;
        }
        return buf[index++];
    } scan {
        if(total<0)
        throw new InputMismatchException();
        if(index>=total)
        {
            index=0;
            total=in.read(buf);
            if(total<=0)
            return -1;
        }
        return buf[index++];
    } if(total<0)
        throw new InputMismatchException(); total<0 total 0 throw new InputMismatchException(); new InputMismatchException() if(index>=total)
        {
            index=0;
            total=in.read(buf);
            if(total<=0)
            return -1;
        } index>=total index total {
            index=0;
            total=in.read(buf);
            if(total<=0)
            return -1;
        } index=0 index 0 total=in.read(buf) total in.read(buf) in.read in buf if(total<=0)
            return -1; total<=0 total 0 return -1; -1 1 return buf[index++]; buf[index++] buf index++ index public int scanInt()throws IOException
    {
        int integer=0;
        int n=scan();
        while(isWhiteSpace(n))
        n=scan();
        int neg=1;
        if(n=='-')
        {
            neg=-1;
            n=scan();
        }
        while(!isWhiteSpace(n))
        {
            if(n>='0'&&n<='9')
            {
                integer*=10;
                integer+=n-'0';
                n=scan();
				
            }
            else throw new InputMismatchException();
        }
        return neg*integer;
    } scanInt {
        int integer=0;
        int n=scan();
        while(isWhiteSpace(n))
        n=scan();
        int neg=1;
        if(n=='-')
        {
            neg=-1;
            n=scan();
        }
        while(!isWhiteSpace(n))
        {
            if(n>='0'&&n<='9')
            {
                integer*=10;
                integer+=n-'0';
                n=scan();
				
            }
            else throw new InputMismatchException();
        }
        return neg*integer;
    } int integer=0; integer 0 int n=scan(); n scan() scan while(isWhiteSpace(n))
        n=scan(); isWhiteSpace(n) isWhiteSpace n n=scan() n scan() scan int neg=1; neg 1 if(n=='-')
        {
            neg=-1;
            n=scan();
        } n=='-' n '-' {
            neg=-1;
            n=scan();
        } neg=-1 neg -1 1 n=scan() n scan() scan while(!isWhiteSpace(n))
        {
            if(n>='0'&&n<='9')
            {
                integer*=10;
                integer+=n-'0';
                n=scan();
				
            }
            else throw new InputMismatchException();
        } !isWhiteSpace(n) isWhiteSpace(n) isWhiteSpace n {
            if(n>='0'&&n<='9')
            {
                integer*=10;
                integer+=n-'0';
                n=scan();
				
            }
            else throw new InputMismatchException();
        } if(n>='0'&&n<='9')
            {
                integer*=10;
                integer+=n-'0';
                n=scan();
				
            }
            else throw new InputMismatchException(); n>='0'&&n<='9' n>='0' n '0' n<='9' n '9' {
                integer*=10;
                integer+=n-'0';
                n=scan();
				
            } integer*=10 integer 10 integer+=n-'0' integer n-'0' n '0' n=scan() n scan() scan throw new InputMismatchException(); new InputMismatchException() return neg*integer; neg*integer neg integer public long scanLong()throws IOException
    {
        long integer=0;
        int n=scan();
        while(isWhiteSpace(n))
        n=scan();
        int neg=1;
        if(n=='-')
        {
            neg=-1;
            n=scan();
        }
        while(!isWhiteSpace(n))
        {
            if(n>='0'&&n<='9')
            {
                integer*=10;
                integer+=n-'0';
                n=scan();
            }
            else throw new InputMismatchException();
        }
        return neg*integer;
    } scanLong {
        long integer=0;
        int n=scan();
        while(isWhiteSpace(n))
        n=scan();
        int neg=1;
        if(n=='-')
        {
            neg=-1;
            n=scan();
        }
        while(!isWhiteSpace(n))
        {
            if(n>='0'&&n<='9')
            {
                integer*=10;
                integer+=n-'0';
                n=scan();
            }
            else throw new InputMismatchException();
        }
        return neg*integer;
    } long integer=0; integer 0 int n=scan(); n scan() scan while(isWhiteSpace(n))
        n=scan(); isWhiteSpace(n) isWhiteSpace n n=scan() n scan() scan int neg=1; neg 1 if(n=='-')
        {
            neg=-1;
            n=scan();
        } n=='-' n '-' {
            neg=-1;
            n=scan();
        } neg=-1 neg -1 1 n=scan() n scan() scan while(!isWhiteSpace(n))
        {
            if(n>='0'&&n<='9')
            {
                integer*=10;
                integer+=n-'0';
                n=scan();
            }
            else throw new InputMismatchException();
        } !isWhiteSpace(n) isWhiteSpace(n) isWhiteSpace n {
            if(n>='0'&&n<='9')
            {
                integer*=10;
                integer+=n-'0';
                n=scan();
            }
            else throw new InputMismatchException();
        } if(n>='0'&&n<='9')
            {
                integer*=10;
                integer+=n-'0';
                n=scan();
            }
            else throw new InputMismatchException(); n>='0'&&n<='9' n>='0' n '0' n<='9' n '9' {
                integer*=10;
                integer+=n-'0';
                n=scan();
            } integer*=10 integer 10 integer+=n-'0' integer n-'0' n '0' n=scan() n scan() scan throw new InputMismatchException(); new InputMismatchException() return neg*integer; neg*integer neg integer public double scanDouble()throws IOException
    {
        double doub=0;
        int n=scan();
        while(isWhiteSpace(n))
        n=scan();
        int neg=1;
        if(n=='-')
        {
            neg=-1;
            n=scan();
        }
        while(!isWhiteSpace(n)&&n!='.')
        {
            if(n>='0'&&n<='9')
            {
                doub*=10;
                doub+=n-'0';
                n=scan();
            }
            else throw new InputMismatchException();
        }
        if(n=='.')
        {
            n=scan();
            double temp=1;
            while(!isWhiteSpace(n))
            {
                if(n>='0'&&n<='9')
                {
                    temp/=10;
                    doub+=(n-'0')*temp;
                    n=scan();
                }
                else throw new InputMismatchException();
            }
        }
        return doub*neg;
    } scanDouble {
        double doub=0;
        int n=scan();
        while(isWhiteSpace(n))
        n=scan();
        int neg=1;
        if(n=='-')
        {
            neg=-1;
            n=scan();
        }
        while(!isWhiteSpace(n)&&n!='.')
        {
            if(n>='0'&&n<='9')
            {
                doub*=10;
                doub+=n-'0';
                n=scan();
            }
            else throw new InputMismatchException();
        }
        if(n=='.')
        {
            n=scan();
            double temp=1;
            while(!isWhiteSpace(n))
            {
                if(n>='0'&&n<='9')
                {
                    temp/=10;
                    doub+=(n-'0')*temp;
                    n=scan();
                }
                else throw new InputMismatchException();
            }
        }
        return doub*neg;
    } double doub=0; doub 0 int n=scan(); n scan() scan while(isWhiteSpace(n))
        n=scan(); isWhiteSpace(n) isWhiteSpace n n=scan() n scan() scan int neg=1; neg 1 if(n=='-')
        {
            neg=-1;
            n=scan();
        } n=='-' n '-' {
            neg=-1;
            n=scan();
        } neg=-1 neg -1 1 n=scan() n scan() scan while(!isWhiteSpace(n)&&n!='.')
        {
            if(n>='0'&&n<='9')
            {
                doub*=10;
                doub+=n-'0';
                n=scan();
            }
            else throw new InputMismatchException();
        } !isWhiteSpace(n)&&n!='.' !isWhiteSpace(n) isWhiteSpace(n) isWhiteSpace n n!='.' n '.' {
            if(n>='0'&&n<='9')
            {
                doub*=10;
                doub+=n-'0';
                n=scan();
            }
            else throw new InputMismatchException();
        } if(n>='0'&&n<='9')
            {
                doub*=10;
                doub+=n-'0';
                n=scan();
            }
            else throw new InputMismatchException(); n>='0'&&n<='9' n>='0' n '0' n<='9' n '9' {
                doub*=10;
                doub+=n-'0';
                n=scan();
            } doub*=10 doub 10 doub+=n-'0' doub n-'0' n '0' n=scan() n scan() scan throw new InputMismatchException(); new InputMismatchException() if(n=='.')
        {
            n=scan();
            double temp=1;
            while(!isWhiteSpace(n))
            {
                if(n>='0'&&n<='9')
                {
                    temp/=10;
                    doub+=(n-'0')*temp;
                    n=scan();
                }
                else throw new InputMismatchException();
            }
        } n=='.' n '.' {
            n=scan();
            double temp=1;
            while(!isWhiteSpace(n))
            {
                if(n>='0'&&n<='9')
                {
                    temp/=10;
                    doub+=(n-'0')*temp;
                    n=scan();
                }
                else throw new InputMismatchException();
            }
        } n=scan() n scan() scan double temp=1; temp 1 while(!isWhiteSpace(n))
            {
                if(n>='0'&&n<='9')
                {
                    temp/=10;
                    doub+=(n-'0')*temp;
                    n=scan();
                }
                else throw new InputMismatchException();
            } !isWhiteSpace(n) isWhiteSpace(n) isWhiteSpace n {
                if(n>='0'&&n<='9')
                {
                    temp/=10;
                    doub+=(n-'0')*temp;
                    n=scan();
                }
                else throw new InputMismatchException();
            } if(n>='0'&&n<='9')
                {
                    temp/=10;
                    doub+=(n-'0')*temp;
                    n=scan();
                }
                else throw new InputMismatchException(); n>='0'&&n<='9' n>='0' n '0' n<='9' n '9' {
                    temp/=10;
                    doub+=(n-'0')*temp;
                    n=scan();
                } temp/=10 temp 10 doub+=(n-'0')*temp doub (n-'0')*temp (n-'0') n '0' temp n=scan() n scan() scan throw new InputMismatchException(); new InputMismatchException() return doub*neg; doub*neg doub neg public String scanString()throws IOException
    {
        StringBuilder sb=new StringBuilder();
        int n=scan();
        while(isWhiteSpace(n))
        n=scan();
        while(!isWhiteSpace(n))
        {
            sb.append((char)n);
            n=scan();
        }
        return sb.toString();
    } scanString {
        StringBuilder sb=new StringBuilder();
        int n=scan();
        while(isWhiteSpace(n))
        n=scan();
        while(!isWhiteSpace(n))
        {
            sb.append((char)n);
            n=scan();
        }
        return sb.toString();
    } StringBuilder sb=new StringBuilder(); sb new StringBuilder() int n=scan(); n scan() scan while(isWhiteSpace(n))
        n=scan(); isWhiteSpace(n) isWhiteSpace n n=scan() n scan() scan while(!isWhiteSpace(n))
        {
            sb.append((char)n);
            n=scan();
        } !isWhiteSpace(n) isWhiteSpace(n) isWhiteSpace n {
            sb.append((char)n);
            n=scan();
        } sb.append((char)n) sb.append sb (char)n n=scan() n scan() scan return sb.toString(); sb.toString() sb.toString sb private boolean isWhiteSpace(int n)
    {
        if(n==' '||n=='\n'||n=='\r'||n=='\t'||n==-1)
        return true;
        return false;
    } isWhiteSpace {
        if(n==' '||n=='\n'||n=='\r'||n=='\t'||n==-1)
        return true;
        return false;
    } if(n==' '||n=='\n'||n=='\r'||n=='\t'||n==-1)
        return true; n==' '||n=='\n'||n=='\r'||n=='\t'||n==-1 n=='\t' n=='\r' n==' '||n=='\n'||n=='\r'||n=='\t'||n==-1 n==' ' n ' ' n=='\n' n '\n' n=='\r' n '\r' n=='\t' n '\t' n==-1 n -1 1 return true; true return false; false int n n
import java.io.*;
import java.util.*;

class Main {
	public static void main(String[] args) throws IOException {
		Scan sc = new Scan();
		int K = sc.scanInt();
		SolABC162_c sol = new SolABC162_c(K);
		sol.calcMu();
		sol.calcGCDTuple(3);
	}
}

class SolABC162_c {
	int K;
	int[] mu, prime;

	public SolABC162_c(int K) {
		this.K = K;
		mu = new int[K + 1];
		prime = new int[K + 1];
		for (int i = 1; i <= K; ++i) {
			mu[i] = 1;
			prime[i] = 1;
		}
	}

	void calcMu() {
		for (int i = 2; i <= K; ++i) {
			if (prime[i] == 1) {
				for (int j = i; j <= K; j += i) {
					if (j > i)
						prime[j] = 0;
					if (j % (i * i) == 0)
						mu[j] = 0;
					mu[j] = -mu[j];
				}
			}
		}
	}

	void calcGCDTuple(int cnt) {
		long res = 0;
		for (int d = 1; d <= K; ++d) {
			long tmp = 0;
			for (int s = 1; s <= K / d; ++s) {
				tmp += (mu[s] * Math.pow(K / (d * s), cnt));
			}
			res += tmp * d;
		}
		System.out.println(res);
	}
}

class Scan {
    private byte[] buf=new byte[1024];
    private int index;
    private InputStream in;
    private int total;
	
    public Scan()
    {
        in=System.in;
    }
    public int scan()throws IOException
    {
        if(total<0)
        throw new InputMismatchException();
        if(index>=total)
        {
            index=0;
            total=in.read(buf);
            if(total<=0)
            return -1;
        }
        return buf[index++];
    }
    public int scanInt()throws IOException
    {
        int integer=0;
        int n=scan();
        while(isWhiteSpace(n))
        n=scan();
        int neg=1;
        if(n=='-')
        {
            neg=-1;
            n=scan();
        }
        while(!isWhiteSpace(n))
        {
            if(n>='0'&&n<='9')
            {
                integer*=10;
                integer+=n-'0';
                n=scan();
				
            }
            else throw new InputMismatchException();
        }
        return neg*integer;
    }
	public long scanLong()throws IOException
    {
        long integer=0;
        int n=scan();
        while(isWhiteSpace(n))
        n=scan();
        int neg=1;
        if(n=='-')
        {
            neg=-1;
            n=scan();
        }
        while(!isWhiteSpace(n))
        {
            if(n>='0'&&n<='9')
            {
                integer*=10;
                integer+=n-'0';
                n=scan();
            }
            else throw new InputMismatchException();
        }
        return neg*integer;
    }
    public double scanDouble()throws IOException
    {
        double doub=0;
        int n=scan();
        while(isWhiteSpace(n))
        n=scan();
        int neg=1;
        if(n=='-')
        {
            neg=-1;
            n=scan();
        }
        while(!isWhiteSpace(n)&&n!='.')
        {
            if(n>='0'&&n<='9')
            {
                doub*=10;
                doub+=n-'0';
                n=scan();
            }
            else throw new InputMismatchException();
        }
        if(n=='.')
        {
            n=scan();
            double temp=1;
            while(!isWhiteSpace(n))
            {
                if(n>='0'&&n<='9')
                {
                    temp/=10;
                    doub+=(n-'0')*temp;
                    n=scan();
                }
                else throw new InputMismatchException();
            }
        }
        return doub*neg;
    }
    public String scanString()throws IOException
    {
        StringBuilder sb=new StringBuilder();
        int n=scan();
        while(isWhiteSpace(n))
        n=scan();
        while(!isWhiteSpace(n))
        {
            sb.append((char)n);
            n=scan();
        }
        return sb.toString();
    }
    private boolean isWhiteSpace(int n)
    {
        if(n==' '||n=='\n'||n=='\r'||n=='\t'||n==-1)
        return true;
        return false;
    }
}

