← Home
package main

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

func main() {
	in := bufio.NewReaderSize(os.Stdin, 1<<20)

	var a, b, c int
	fmt.Fscan(in, &a, &b, &c)

	dims := []int{a, b, c}
	sort.Ints(dims)
	a, b, c = dims[0], dims[1], dims[2]

	maxX := a * b
	cnt := make([]int, maxX+1)

	for i := 1; i <= a; i++ {
		for j := 1; j <= b; j++ {
			cnt[i*j]++
		}
	}

	g := make([]int64, c+1)
	for d := 1; d <= c; d++ {
		var s int64
		for q := d; q <= c; q += d {
			s += int64(c / q)
		}
		g[d] = s
	}

	spf := make([]int, maxX+1)
	if maxX >= 1 {
		spf[1] = 1
	}
	for i := 2; i <= maxX; i++ {
		if spf[i] == 0 {
			spf[i] = i
			if i <= maxX/i {
				for j := i * i; j <= maxX; j += i {
					if spf[j] == 0 {
						spf[j] = i
					}
				}
			}
		}
	}

	var res int64
	var primes [8]int
	var exps [8]int
	var posStack [256]int
	var dStack [256]int
	var coeffStack [256]int64

	for x := 1; x <= maxX; x++ {
		if cnt[x] == 0 {
			continue
		}

		n := x
		m := 0
		for n > 1 {
			p := spf[n]
			e := 0
			for n%p == 0 {
				n /= p
				e++
			}
			primes[m] = p
			exps[m] = e
			m++
		}

		var fx int64
		top := 0
		posStack[0] = 0
		dStack[0] = 1
		coeffStack[0] = 1

		for top >= 0 {
			pos := posStack[top]
			dcur := dStack[top]
			coeff := coeffStack[top]
			top--

			if pos == m {
				fx += coeff * g[dcur]
				continue
			}

			top++
			posStack[top] = pos + 1
			dStack[top] = dcur
			coeffStack[top] = coeff * int64(exps[pos]+1)

			nd := dcur * primes[pos]
			if nd <= c {
				top++
				posStack[top] = pos + 1
				dStack[top] = nd
				coeffStack[top] = coeff * int64(-exps[pos])
			}
		}

		res += int64(cnt[x]) * fx
	}

	const mod int64 = 1073741824
	fmt.Print(res % mod)
}