program change_a_little_bit
    implicit none
    integer(8),parameter:: md=1000000007_8
    integer(8):: n,i,ans=0
    integer(8),allocatable:: c(:)

    read*,n
    allocate(c(n))
    read*,c(:)
    call merge_sort(c,1_8,n)
    
    do i=1, n
        ans = mod(ans + mod(c(i)*mod(pow_fast(2_8,n-1,md)+mod(pow_fast(2_8,n-2,md)*(n-i),md),md),md),md)
    end do

    print*, mod(ans*pow_fast(2_8,n,md),md)
contains

recursive subroutine merge_sort(ar,fst,lst)
    integer(8):: ar(:), fst, lst, mid, tmp

    if (lst-fst < 2) then
        if(ar(lst) < ar(fst)) then
            tmp = ar(lst)
            ar(lst) = ar(fst)
            ar(fst) = tmp
        end if
        return
    end if

    mid = (fst+lst)/2
    call merge_sort(ar,fst,mid)
    call merge_sort(ar,mid+1,lst)
    call merge(ar,fst,mid,lst)
end subroutine

subroutine merge(ar,fst,mid,lst)
    integer(8):: ar(:), fst, mid, lst
    integer(8),pointer:: tmp(:)
    integer(8):: it,il,ir

    allocate(tmp(lst-fst+1))
    it = 1
    il = fst
    ir = mid+1
    do while(il<=mid .and. ir<=lst)
        if (ar(il) <= ar(ir)) then
            tmp(it) = ar(il)
            il=il+1        
        else
            tmp(it) = ar(ir)
            ir=ir+1
        end if
        it=it+1
    end do

    if (ir > lst) then
        tmp(it:) = ar(il:mid)
    else
        tmp(it:) = ar(ir:lst)
    end if

    ar(fst:lst) = tmp(:)
    deallocate(tmp)
end subroutine

function pow_fast(x,pow,md) result(ret)
    integer(8),value:: x, pow
    integer(8)::md,ret

    ret=1_8
    if (x==1 .or. pow==0) return

    do while(pow > 0_8)
        if (mod(pow,2_8) == 1_8) then
            ret = mod(ret*x,md)
        end if
        x = mod(x*x,md)
        pow = pow/2_8
    end do

end function



end program change_a_little_bit