← Home
package main

import (
	"fmt"
	"io"
	"os"
	"sort"
)

func nextInt(data []byte, idx *int) int {
	n := len(data)
	i := *idx
	for i < n && data[i] <= ' ' {
		i++
	}
	v := 0
	for i < n {
		c := data[i]
		if c < '0' || c > '9' {
			break
		}
		v = v*10 + int(c-'0')
		i++
	}
	*idx = i
	return v
}

func main() {
	data, _ := io.ReadAll(os.Stdin)
	idx := 0
	n := nextInt(data, &idx)

	a := make([]int, n)
	vals := make([]int, n)
	for i := 0; i < n; i++ {
		v := nextInt(data, &idx)
		a[i] = v
		vals[i] = v
	}

	sort.Ints(vals)
	for i := 0; i < n; i++ {
		a[i] = sort.SearchInts(vals, a[i]) + 1
	}

	right := make([]int, n)
	tree := make([]int, n+2)

	for i := n - 1; i >= 0; i-- {
		r := a[i]
		s := 0
		for x := r - 1; x > 0; x -= x & -x {
			s += tree[x]
		}
		right[i] = s
		for x := r; x <= n; x += x & -x {
			tree[x]++
		}
	}

	for i := range tree {
		tree[i] = 0
	}

	var ans int64
	seen := 0
	for i := 0; i < n; i++ {
		r := a[i]
		le := 0
		for x := r; x > 0; x -= x & -x {
			le += tree[x]
		}
		leftGreater := seen - le
		ans += int64(leftGreater) * int64(right[i])
		for x := r; x <= n; x += x & -x {
			tree[x]++
		}
		seen++
	}

	fmt.Print(ans)
}