```go
package main
import (
"bufio"
"os"
"strconv"
)
func readInt(reader *bufio.Reader) int {
var n int
var c byte
var err error
for {
c, err = reader.ReadByte()
if err != nil || (c >= '0' && c <= '9') {
break
}
}
if err != nil {
return 0
}
for {
n = n*10 + int(c-'0')
c, err = reader.ReadByte()
if err != nil || c < '0' || c > '9' {
break
}
}
return n
}
func main() {
reader := bufio.NewReaderSize(os.Stdin, 65536)
writer := bufio.NewWriterSize(os.Stdout, 65536)
defer writer.Flush()
n := readInt(reader)
if n == 0 {
return
}
a := make([]int, n)
maxA := 0
for i := 0; i < n; i++ {
a[i] = readInt(reader)
if a[i] > maxA {
maxA = a[i]
}
}
M := maxA
bit1 := make([]int64, M+2)
bit2 := make([]int32, M+2)
add1 := func(idx int, val int64) {
for i := idx; i <= M; i += i & -i {
bit1[i] += val
}
}
query1 := func(idx int) int64 {
sum := int64(0)
for i := idx; i > 0; i -= i & -i {
sum += bit1[i]
}
return sum
}
add2 := func(idx int, val int32) {
for i := idx; i <= M; i += i & -i {
bit2[i] += val
}
}
query2 := func(idx int) int32 {
sum := int32(0)
for i := idx; i > 0; i -= i & -i {
sum += bit2[i]
}
return sum
}
var S int64 = 0
var pk int64 = 0
for k := 1; k <= n; k++ {
ak := a[k-1]
sum1 := query1(ak)
part1 := int64(k-1)*int64(ak) - sum1
sum2 := int64(0)
for c := 1; c*ak <= M; c++ {
L := c * ak
R := (c + 1) * ak - 1
if R > M {
R = M
}
cnt := query2(R) - query2(L-1)
sum2 += int64(c) * int64(cnt)
}
part2 := S - sum2*int64(ak)
pk += part1 + part2
writer.WriteString(strconv.FormatInt(pk, 10))
writer.WriteByte(' ')
S += int64(ak)
for c := 1; c*ak <= M; c++ {
L := c * ak
R := (c + 1) * ak - 1
if R > M {
R = M
}
add1(L, int64(c*ak))
add1(R+1, -int64(c*ak))
}
add2(ak, 1)
}
writer.WriteByte('\n')
}
```