Since there can not be overlapping matches, you need to use something that prohibits regex engine from advancing and consuming the string.
The answer is lookarounds, specifically: positive lookahead. It won't consume string and can have captuirng group inside, which you can then access.
Use this pattern: (?=([a-z]{3}))
. It asserts, that what follows current position are three lowercase letters. Since it's wrapped in lookahead, it won't advance behind found three letters.
In result, you will get 6 matches, which will be empty, but each match will contain capturing group, which will contain three letters.
Demo