program main
  implicit none
  type pairtype
    integer :: v, k
  end type pairtype
  integer :: n, i, j, pos
  integer, allocatable :: a(:)
  integer(8), allocatable :: dp(:),  dppre(:)
  type(pairtype), allocatable :: a1(:), a2(:)
  read *, n
  allocate (a(n), a1(n), a2(n), dp(0:n), dppre(0:n))
  read *, a
  do i = 1, n
    a1(i) = pairtype(a(i), i)
  end do
  call quicksort(a1)

  dp(:) = -10 ** 18
  dp(0) = 0
  do i = n, 1, -1
    dppre = dp

    do j = 0, n - i
      ! 左に入れる
      pos = j + 1
      dp(j + 1) = max(dp(j + 1), dppre(j) + (a1(i) % v) * abs(a1(i) % k - pos))

      ! 右に入れる
      pos = i + j
      dp(j) = max(dp(j), dppre(j) + (a1(i) % v) * abs(a1(i) % k - pos))
    end do
  end do

  print "(i0)", maxval(dp)

  contains

  integer(8) function score(a, n)
    integer, intent(in) :: n
    type(pairtype), intent(in) :: a(n)
    integer :: i
    score = 0
    do i = 1, n
      score = score + abs(a(i) % k - i) * a(i) % v
    end do
  end function score

  recursive subroutine quicksort(a)
    type(pairtype), intent(inout) :: a(:)
    type(pairtype) :: pivot, tmp
    integer :: i, j, k, n
    real(4) :: r
    n = size(a)
    if (n <= 1) return
    i = 1
    j = n
    call random_number(r)
    k = 1 + floor(r * n)
    k = max(1, min(k, n))
    pivot = a(k)
    do
      do while (.not. pivot % v <= a(i) % v)
        i = i + 1
      end do
      do while (.not. a(j) % v <= pivot % v)
        j = j - 1
      end do
      if (i >= j) exit
      tmp = a(i)
      a(i) = a(j)
      a(j) = tmp
      i = i + 1
      j = j - 1
    end do
    call quicksort(a(1:i - 1))
    call quicksort(a(j + 1:n))
  end subroutine quicksort
end program main
