fun main(args: Array<String>) = ABC163D.main()

object ABC163D {
    fun log(message: Any?) {
        //println(message)// TODO: ←消す
    }

    fun main() {
        val (N, K) = readLongs()

        val sizes = (K..N + 1).asSequence().map { k ->
            val min = (0..k - 1).sum()
            val max = (N - k + 1..N).sum()
            max - min + 1
        }
        val ans = sizes.fold(0L.toModLong(1000000007)) { acc, it -> acc + it }
        println(ans)
    }

    /*####################################################################################*/
    fun readLongs() = readLine()!!.split(" ").map { it.toLong() }

    fun LongRange.sum(): Long {
        val length = this.last - this.first + 1
        return length * (this.first + this.last) / 2
    }

    fun Number.toModLong(base: Long): ModLong = ModLong(this.toLong() % base, base)
    class ModLong(
        private val value: Long,
        private val base: Long
    ) : Number(), Comparable<ModLong> {
        override fun toString(): String = value.toString()
        override fun equals(other: Any?): Boolean = value == other
        override fun hashCode(): Int = value.hashCode()
        operator fun plus(other: Long): ModLong = (this.value + other % base).toModLong(base)
        override fun compareTo(other: ModLong): Int = value.compareTo(other.value)
        override fun toByte(): Byte = value.toByte()
        override fun toChar(): Char = value.toChar()
        override fun toDouble(): Double = value.toDouble()
        override fun toFloat(): Float = value.toFloat()
        override fun toInt(): Int = value.toInt()
        override fun toLong(): Long = value
        override fun toShort(): Short = value.toShort()
    }
}