#include <iostream>
#include <algorithm>
#include <string>
#include <vector>
#include <cmath>
#include <map>
#include <queue>
#include <iomanip>
#include <deque>
#define MOD 1000000007
typedef long long ll;
using namespace std;

int N,M,K;
vector<ll> A;

const ll INF=-1e18;

int main(){
  cin>>N>>M>>K;
  A.resize(N);
  for(int i=0;i<N;i++) cin>>A[i];

  vector<ll> dp(N);
  for(int i=0;i<N;i++) dp[i]=A[i];

  for(int i=2;i<=K;i++){
      vector<ll> next(N,INF);
      deque<ll> DQ;
      for(int j=0;j<N;j++){
          while(!DQ.empty()){
              if(DQ.front()<j-M) DQ.pop_front();
              else break;
          }

          if(!DQ.empty()){
              next[j]=dp[DQ.front()]+A[j]*i;
          }

          while(!DQ.empty()){
              if(dp[DQ.back()]<=dp[j]) DQ.pop_back();
              else break;
          }

          DQ.push_back(j);
      }
      dp=next;
  }

  ll ans=0;
  for(int i=0;i<N;i++) ans=max(ans,dp[i]);
  cout<<ans<<endl;

  return 0;
}
