package main
import (
"bufio"
"fmt"
"os"
"sort"
)
type Pair struct {
val int
idx int
}
func main() {
reader := bufio.NewReader(os.Stdin)
var n int
if _, err := fmt.Fscan(reader, &n); err != nil {
return
}
a := make([]Pair, n)
for i := 0; i < n; i++ {
fmt.Fscan(reader, &a[i].val)
a[i].idx = i + 1
}
sort.Slice(a, func(i, j int) bool {
return a[i].val > a[j].val
})
divs := make([][]int, n+1)
for i := 1; i <= n; i++ {
for j := i; j <= n; j += i {
divs[j] = append(divs[j], i)
}
}
MOD := 998244353
pow2 := make([]int, n+1)
pow2[0] = 1
for i := 1; i <= n; i++ {
pow2[i] = (pow2[i-1] * 2) % MOD
}
seen := make([]bool, n+1)
cnt := 0
ans := 0
for _, p := range a {
newDivs := 0
for _, d := range divs[p.idx] {
if !seen[d] {
seen[d] = true
newDivs++
}
}
if newDivs > 0 {
ways := (pow2[n-cnt] - pow2[n-(cnt+newDivs)] + MOD) % MOD
term := (ways * p.val) % MOD
ans = (ans + term) % MOD
cnt += newDivs
}
}
fmt.Println(ans)
}