package main

import (
	"bufio"
	"fmt"
	"os"
)

func main() {
	in := bufio.NewReaderSize(os.Stdin, 1<<20)
	out := bufio.NewWriterSize(os.Stdout, 1<<20)
	defer out.Flush()

	var N int
	var A1, M int64
	if _, err := fmt.Fscan(in, &N, &A1, &M); err != nil {
		return
	}

	if N <= 0 {
		fmt.Fprintln(out, 0)
		return
	}
	if M < 0 {
		M = -M
	}
	if M == 0 {
		fmt.Fprintln(out, 0)
		return
	}

	A := make([]int64, N+1)
	B := make([]int64, N+1)

	A[1] = A1

	for i := 2; i <= N; i++ {
		prev := A[i-1] % M
		if prev < 0 {
			prev += M
		}
		A[i] = (prev + (7*int64(i))%M) % M
	}

	for d := 1; d <= N; d++ {
		ad := A[d]
		for k := d; k <= N; k += d {
			B[k] += ad
		}
	}

	var ans int64
	for i := 1; i <= N; i++ {
		ans ^= B[i]
	}
	fmt.Fprintln(out, ans)
}