#include <bits/stdc++.h>
using namespace std;
using ivec = vector<int>;
const int mod = 1e9+7;

struct products {
	int maxScore = 0;
	inline int sum(const ivec &a, int u, int v) {
		int s = 0;
		while (u < v)
			if (s += a[u++], s >= mod)
				s -= mod;
		return s; }
    inline void mac(const ivec &a, int i, int u, int v) {
    	long long w = 1ll*i*sum(a,u,v);
    	if (w %= mod, maxScore += w, maxScore >= mod)
    		maxScore -= mod; }
    inline products(ivec &a, int m) {
        int n = a.size(), p = n/m, u = 0, v = m;
        sort(a.begin(),a.end());  
        for (int i = 1; i < p; ++i)
        	mac(a,i,u,v), u = v, v += m;
    	mac(a,p,u,n); } };

inline int maxScore(ivec &a, int m) { return products(a,m).maxScore; }

int main() {
    int n, m; ivec a;
    ios_base::sync_with_stdio(0), cin.tie(0), cin >> n >> m, a.resize(n);
    for (auto &b: a)
        cin >> b;
    cout << maxScore(a,m); }
